sdl3-bindgen-sys-0.0.0.1: runtime/HsBindgen/Runtime/Support/TH/Instances.hs
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -Wno-missing-export-lists #-}
{-# OPTIONS_GHC -Wno-orphans #-}
-- | Generate FFI wrappers and 'ToFunPtr' class instances for 287 types.
module HsBindgen.Runtime.Support.TH.Instances () where
import Foreign.C.Types
import HsBindgen.Runtime.Support.FunPtr.Class
import HsBindgen.Runtime.Support.TH.Types
-- | Generate instances for all @IO a@ functions
--
-- > 17 FFI wrappers
-- > 17 FFI dynamic
-- > 17 ToFunPtr instances
-- > 17 FromFunPtr instances
--
-- Total = 68
$( do
decls <-
sequence
[ generateInstance retTy
| retTy <- allIOTypes
]
return $ concat decls
)
-- | Generate instances for all @a -> IO b@ functions
--
-- > (17 + 17) * 2 = 70 FFI wrappers
-- > (17 + 17) * 2 = 70 FFI dynamic
-- > (17 + 17) * 2 = 70 ToFunPtr instances
-- > (17 + 17) * 2 = 70 FromFunPtr instances
--
-- Total = 280
$( do
decls <-
sequence
[ generateInstance [t|$argTy -> $retTy|]
| argTy <- allPrimTypes ++ allPtrTypes
, retTy <- commonReturnTypes
]
return $ concat decls
)
-- | Generate instances for @a -> b -> IO c@ functions.
--
-- We can't generate all binary functions because that would mean
--
-- > (17 + 18) * (17 + 18) * 18 = 22050 instances
--
-- Instead we only generate instances for the most common C callback
-- signatures.
--
-- > (5 + 5) * (5 + 5) * 2 = 200 FFI wrappers
-- > (5 + 5) * (5 + 5) * 2 = 200 FFI dynamic
-- > (5 + 5) * (5 + 5) * 2 = 200 ToFunPtr instances
-- > (5 + 5) * (5 + 5) * 2 = 200 FromFunPtr instances
--
-- Total = 800
$( do
decls <-
sequence
[ generateInstance [t|$argTy1 -> $argTy2 -> $retTy|]
| argTy1 <- commonPrimTypes ++ commonPtrTypes
, argTy2 <- commonPrimTypes ++ commonPtrTypes
, retTy <- commonReturnTypes
]
return $ concat decls
)