-- addDependentFile examples/golden/types/typedefs/multi_level_function_pointer.h
{-| Auxiliary type used by 'F1'

__C declaration:__ @f1@

__defined at:__ @types\/typedefs\/multi_level_function_pointer.h 7:16@

__exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F1_Aux
    = F1_Aux {unwrapF1_Aux :: (CInt -> CInt -> IO Unit)}
      {- ^ Auxiliary type used by 'F1'

      __C declaration:__ @f1@

      __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 7:16@

      __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving newtype HasFFIType
foreign import ccall safe "wrapper" hs_bindgen_00d16e666202ed6c_base ::
    Int32 -> Int32 -> IO Unit
 -> IO (FunPtr (Int32 -> Int32 -> IO Unit))
-- __unique:__ @toF1_Aux@
hs_bindgen_00d16e666202ed6c :: F1_Aux -> IO (FunPtr F1_Aux)
-- __unique:__ @toF1_Aux@
hs_bindgen_00d16e666202ed6c = \fun_0 -> fmap castFunPtrFromFFIType (hs_bindgen_00d16e666202ed6c_base (toFFIType fun_0))
foreign import ccall safe "dynamic" hs_bindgen_ddeb5206e8192425_base ::
    FunPtr (Int32 -> Int32 -> IO Unit)
 -> Int32
 -> Int32
 -> IO Unit
-- __unique:__ @fromF1_Aux@
hs_bindgen_ddeb5206e8192425 :: FunPtr F1_Aux -> F1_Aux
-- __unique:__ @fromF1_Aux@
hs_bindgen_ddeb5206e8192425 = \funPtr_0 -> fromFFIType (hs_bindgen_ddeb5206e8192425_base (castFunPtrToFFIType funPtr_0))
instance ToFunPtr F1_Aux
    where toFunPtr = hs_bindgen_00d16e666202ed6c
instance FromFunPtr F1_Aux
    where fromFunPtr = hs_bindgen_ddeb5206e8192425
instance TyEq ty (CFieldType F1_Aux "unwrapF1_Aux") =>
         HasField "unwrapF1_Aux" (Ptr F1_Aux) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF1_Aux")
instance HasCField F1_Aux "unwrapF1_Aux"
    where type CFieldType F1_Aux "unwrapF1_Aux" = CInt ->
                                                  CInt -> IO Unit
          offset# = \_ -> \_ -> 0
{-| __C declaration:__ @f1@

    __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 7:16@

    __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F1
    = F1 {unwrapF1 :: (FunPtr F1_Aux)}
      {- ^ __C declaration:__ @f1@

           __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 7:16@

           __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving stock (Eq, Ord, Show)
    deriving newtype (StaticSize,
                      ReadRaw,
                      WriteRaw,
                      Storable,
                      HasFFIType)
instance TyEq ty (CFieldType F1 "unwrapF1") =>
         HasField "unwrapF1" (Ptr F1) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF1")
instance HasCField F1 "unwrapF1"
    where type CFieldType F1 "unwrapF1" = FunPtr F1_Aux
          offset# = \_ -> \_ -> 0
{-| Auxiliary type used by 'F2'

__C declaration:__ @f2@

__defined at:__ @types\/typedefs\/multi_level_function_pointer.h 10:17@

__exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F2_Aux
    = F2_Aux {unwrapF2_Aux :: (CInt -> CInt -> IO Unit)}
      {- ^ Auxiliary type used by 'F2'

      __C declaration:__ @f2@

      __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 10:17@

      __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving newtype HasFFIType
foreign import ccall safe "wrapper" hs_bindgen_c39d7524b75b54e8_base ::
    Int32 -> Int32 -> IO Unit
 -> IO (FunPtr (Int32 -> Int32 -> IO Unit))
-- __unique:__ @toF2_Aux@
hs_bindgen_c39d7524b75b54e8 :: F2_Aux -> IO (FunPtr F2_Aux)
-- __unique:__ @toF2_Aux@
hs_bindgen_c39d7524b75b54e8 = \fun_0 -> fmap castFunPtrFromFFIType (hs_bindgen_c39d7524b75b54e8_base (toFFIType fun_0))
foreign import ccall safe "dynamic" hs_bindgen_e15bcd26f1ed1df7_base ::
    FunPtr (Int32 -> Int32 -> IO Unit)
 -> Int32
 -> Int32
 -> IO Unit
-- __unique:__ @fromF2_Aux@
hs_bindgen_e15bcd26f1ed1df7 :: FunPtr F2_Aux -> F2_Aux
-- __unique:__ @fromF2_Aux@
hs_bindgen_e15bcd26f1ed1df7 = \funPtr_0 -> fromFFIType (hs_bindgen_e15bcd26f1ed1df7_base (castFunPtrToFFIType funPtr_0))
instance ToFunPtr F2_Aux
    where toFunPtr = hs_bindgen_c39d7524b75b54e8
instance FromFunPtr F2_Aux
    where fromFunPtr = hs_bindgen_e15bcd26f1ed1df7
instance TyEq ty (CFieldType F2_Aux "unwrapF2_Aux") =>
         HasField "unwrapF2_Aux" (Ptr F2_Aux) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF2_Aux")
instance HasCField F2_Aux "unwrapF2_Aux"
    where type CFieldType F2_Aux "unwrapF2_Aux" = CInt ->
                                                  CInt -> IO Unit
          offset# = \_ -> \_ -> 0
{-| __C declaration:__ @f2@

    __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 10:17@

    __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F2
    = F2 {unwrapF2 :: (Ptr (FunPtr F2_Aux))}
      {- ^ __C declaration:__ @f2@

           __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 10:17@

           __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving stock (Eq, Ord, Show)
    deriving newtype (StaticSize,
                      ReadRaw,
                      WriteRaw,
                      Storable,
                      HasFFIType)
instance TyEq ty (CFieldType F2 "unwrapF2") =>
         HasField "unwrapF2" (Ptr F2) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF2")
instance HasCField F2 "unwrapF2"
    where type CFieldType F2 "unwrapF2" = Ptr (FunPtr F2_Aux)
          offset# = \_ -> \_ -> 0
{-| Auxiliary type used by 'F3'

__C declaration:__ @f3@

__defined at:__ @types\/typedefs\/multi_level_function_pointer.h 13:18@

__exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F3_Aux
    = F3_Aux {unwrapF3_Aux :: (CInt -> CInt -> IO Unit)}
      {- ^ Auxiliary type used by 'F3'

      __C declaration:__ @f3@

      __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 13:18@

      __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving newtype HasFFIType
foreign import ccall safe "wrapper" hs_bindgen_4a960721e7d1dcef_base ::
    Int32 -> Int32 -> IO Unit
 -> IO (FunPtr (Int32 -> Int32 -> IO Unit))
-- __unique:__ @toF3_Aux@
hs_bindgen_4a960721e7d1dcef :: F3_Aux -> IO (FunPtr F3_Aux)
-- __unique:__ @toF3_Aux@
hs_bindgen_4a960721e7d1dcef = \fun_0 -> fmap castFunPtrFromFFIType (hs_bindgen_4a960721e7d1dcef_base (toFFIType fun_0))
foreign import ccall safe "dynamic" hs_bindgen_66460422a7197535_base ::
    FunPtr (Int32 -> Int32 -> IO Unit)
 -> Int32
 -> Int32
 -> IO Unit
-- __unique:__ @fromF3_Aux@
hs_bindgen_66460422a7197535 :: FunPtr F3_Aux -> F3_Aux
-- __unique:__ @fromF3_Aux@
hs_bindgen_66460422a7197535 = \funPtr_0 -> fromFFIType (hs_bindgen_66460422a7197535_base (castFunPtrToFFIType funPtr_0))
instance ToFunPtr F3_Aux
    where toFunPtr = hs_bindgen_4a960721e7d1dcef
instance FromFunPtr F3_Aux
    where fromFunPtr = hs_bindgen_66460422a7197535
instance TyEq ty (CFieldType F3_Aux "unwrapF3_Aux") =>
         HasField "unwrapF3_Aux" (Ptr F3_Aux) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF3_Aux")
instance HasCField F3_Aux "unwrapF3_Aux"
    where type CFieldType F3_Aux "unwrapF3_Aux" = CInt ->
                                                  CInt -> IO Unit
          offset# = \_ -> \_ -> 0
{-| __C declaration:__ @f3@

    __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 13:18@

    __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F3
    = F3 {unwrapF3 :: (Ptr (Ptr (FunPtr F3_Aux)))}
      {- ^ __C declaration:__ @f3@

           __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 13:18@

           __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving stock (Eq, Ord, Show)
    deriving newtype (StaticSize,
                      ReadRaw,
                      WriteRaw,
                      Storable,
                      HasFFIType)
instance TyEq ty (CFieldType F3 "unwrapF3") =>
         HasField "unwrapF3" (Ptr F3) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF3")
instance HasCField F3 "unwrapF3"
    where type CFieldType F3 "unwrapF3" = Ptr (Ptr (FunPtr F3_Aux))
          offset# = \_ -> \_ -> 0
{-| Auxiliary type used by 'F4'

__C declaration:__ @f4@

__defined at:__ @types\/typedefs\/multi_level_function_pointer.h 16:16@

__exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F4_Aux
    = F4_Aux {unwrapF4_Aux :: (IO CInt)}
      {- ^ Auxiliary type used by 'F4'

      __C declaration:__ @f4@

      __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 16:16@

      __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving newtype HasFFIType
foreign import ccall safe "wrapper" hs_bindgen_83bcff023b3bc648_base ::
    IO Int32
 -> IO (FunPtr (IO Int32))
-- __unique:__ @toF4_Aux@
hs_bindgen_83bcff023b3bc648 :: F4_Aux -> IO (FunPtr F4_Aux)
-- __unique:__ @toF4_Aux@
hs_bindgen_83bcff023b3bc648 = \fun_0 -> fmap castFunPtrFromFFIType (hs_bindgen_83bcff023b3bc648_base (toFFIType fun_0))
foreign import ccall safe "dynamic" hs_bindgen_40f9a8d432b9eb97_base ::
    FunPtr (IO Int32)
 -> IO Int32
-- __unique:__ @fromF4_Aux@
hs_bindgen_40f9a8d432b9eb97 :: FunPtr F4_Aux -> F4_Aux
-- __unique:__ @fromF4_Aux@
hs_bindgen_40f9a8d432b9eb97 = \funPtr_0 -> fromFFIType (hs_bindgen_40f9a8d432b9eb97_base (castFunPtrToFFIType funPtr_0))
instance ToFunPtr F4_Aux
    where toFunPtr = hs_bindgen_83bcff023b3bc648
instance FromFunPtr F4_Aux
    where fromFunPtr = hs_bindgen_40f9a8d432b9eb97
instance TyEq ty (CFieldType F4_Aux "unwrapF4_Aux") =>
         HasField "unwrapF4_Aux" (Ptr F4_Aux) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF4_Aux")
instance HasCField F4_Aux "unwrapF4_Aux"
    where type CFieldType F4_Aux "unwrapF4_Aux" = IO CInt
          offset# = \_ -> \_ -> 0
{-| __C declaration:__ @f4@

    __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 16:16@

    __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F4
    = F4 {unwrapF4 :: (Ptr (FunPtr F4_Aux))}
      {- ^ __C declaration:__ @f4@

           __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 16:16@

           __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving stock (Eq, Ord, Show)
    deriving newtype (StaticSize,
                      ReadRaw,
                      WriteRaw,
                      Storable,
                      HasFFIType)
instance TyEq ty (CFieldType F4 "unwrapF4") =>
         HasField "unwrapF4" (Ptr F4) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF4")
instance HasCField F4 "unwrapF4"
    where type CFieldType F4 "unwrapF4" = Ptr (FunPtr F4_Aux)
          offset# = \_ -> \_ -> 0
{-| Auxiliary type used by 'F5'

__C declaration:__ @f5@

__defined at:__ @types\/typedefs\/multi_level_function_pointer.h 19:17@

__exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F5_Aux
    = F5_Aux {unwrapF5_Aux :: (IO Unit)}
      {- ^ Auxiliary type used by 'F5'

      __C declaration:__ @f5@

      __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 19:17@

      __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving newtype HasFFIType
foreign import ccall safe "wrapper" hs_bindgen_6891cbd81d6f42b9_base ::
    IO Unit
 -> IO (FunPtr (IO Unit))
-- __unique:__ @toF5_Aux@
hs_bindgen_6891cbd81d6f42b9 :: F5_Aux -> IO (FunPtr F5_Aux)
-- __unique:__ @toF5_Aux@
hs_bindgen_6891cbd81d6f42b9 = \fun_0 -> fmap castFunPtrFromFFIType (hs_bindgen_6891cbd81d6f42b9_base (toFFIType fun_0))
foreign import ccall safe "dynamic" hs_bindgen_586f6635c057975f_base ::
    FunPtr (IO Unit)
 -> IO Unit
-- __unique:__ @fromF5_Aux@
hs_bindgen_586f6635c057975f :: FunPtr F5_Aux -> F5_Aux
-- __unique:__ @fromF5_Aux@
hs_bindgen_586f6635c057975f = \funPtr_0 -> fromFFIType (hs_bindgen_586f6635c057975f_base (castFunPtrToFFIType funPtr_0))
instance ToFunPtr F5_Aux
    where toFunPtr = hs_bindgen_6891cbd81d6f42b9
instance FromFunPtr F5_Aux
    where fromFunPtr = hs_bindgen_586f6635c057975f
instance TyEq ty (CFieldType F5_Aux "unwrapF5_Aux") =>
         HasField "unwrapF5_Aux" (Ptr F5_Aux) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF5_Aux")
instance HasCField F5_Aux "unwrapF5_Aux"
    where type CFieldType F5_Aux "unwrapF5_Aux" = IO Unit
          offset# = \_ -> \_ -> 0
{-| __C declaration:__ @f5@

    __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 19:17@

    __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F5
    = F5 {unwrapF5 :: (Ptr (FunPtr F5_Aux))}
      {- ^ __C declaration:__ @f5@

           __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 19:17@

           __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving stock (Eq, Ord, Show)
    deriving newtype (StaticSize,
                      ReadRaw,
                      WriteRaw,
                      Storable,
                      HasFFIType)
instance TyEq ty (CFieldType F5 "unwrapF5") =>
         HasField "unwrapF5" (Ptr F5) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF5")
instance HasCField F5 "unwrapF5"
    where type CFieldType F5 "unwrapF5" = Ptr (FunPtr F5_Aux)
          offset# = \_ -> \_ -> 0
{-| __C declaration:__ @MyInt@

    __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 22:13@

    __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype MyInt
    = MyInt {unwrapMyInt :: CInt}
      {- ^ __C declaration:__ @MyInt@

           __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 22:13@

           __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving stock (Eq, Ord, Read, Show)
    deriving newtype (StaticSize,
                      ReadRaw,
                      WriteRaw,
                      Storable,
                      HasFFIType,
                      Prim,
                      Bitfield,
                      Bits,
                      Bounded,
                      Enum,
                      FiniteBits,
                      Integral,
                      Ix,
                      Num,
                      Real)
instance TyEq ty (CFieldType MyInt "unwrapMyInt") =>
         HasField "unwrapMyInt" (Ptr MyInt) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapMyInt")
instance HasCField MyInt "unwrapMyInt"
    where type CFieldType MyInt "unwrapMyInt" = CInt
          offset# = \_ -> \_ -> 0
{-| Auxiliary type used by 'F6'

__C declaration:__ @f6@

__defined at:__ @types\/typedefs\/multi_level_function_pointer.h 23:17@

__exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F6_Aux
    = F6_Aux {unwrapF6_Aux :: (MyInt -> IO Unit)}
      {- ^ Auxiliary type used by 'F6'

      __C declaration:__ @f6@

      __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 23:17@

      __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving newtype HasFFIType
foreign import ccall safe "wrapper" hs_bindgen_c1baf73f98614f45_base ::
    Int32 -> IO Unit
 -> IO (FunPtr (Int32 -> IO Unit))
-- __unique:__ @toF6_Aux@
hs_bindgen_c1baf73f98614f45 :: F6_Aux -> IO (FunPtr F6_Aux)
-- __unique:__ @toF6_Aux@
hs_bindgen_c1baf73f98614f45 = \fun_0 -> fmap castFunPtrFromFFIType (hs_bindgen_c1baf73f98614f45_base (toFFIType fun_0))
foreign import ccall safe "dynamic" hs_bindgen_a887947b26e58f0c_base ::
    FunPtr (Int32 -> IO Unit)
 -> Int32
 -> IO Unit
-- __unique:__ @fromF6_Aux@
hs_bindgen_a887947b26e58f0c :: FunPtr F6_Aux -> F6_Aux
-- __unique:__ @fromF6_Aux@
hs_bindgen_a887947b26e58f0c = \funPtr_0 -> fromFFIType (hs_bindgen_a887947b26e58f0c_base (castFunPtrToFFIType funPtr_0))
instance ToFunPtr F6_Aux
    where toFunPtr = hs_bindgen_c1baf73f98614f45
instance FromFunPtr F6_Aux
    where fromFunPtr = hs_bindgen_a887947b26e58f0c
instance TyEq ty (CFieldType F6_Aux "unwrapF6_Aux") =>
         HasField "unwrapF6_Aux" (Ptr F6_Aux) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF6_Aux")
instance HasCField F6_Aux "unwrapF6_Aux"
    where type CFieldType F6_Aux "unwrapF6_Aux" = MyInt -> IO Unit
          offset# = \_ -> \_ -> 0
{-| __C declaration:__ @f6@

    __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 23:17@

    __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
-}
newtype F6
    = F6 {unwrapF6 :: (Ptr (FunPtr F6_Aux))}
      {- ^ __C declaration:__ @f6@

           __defined at:__ @types\/typedefs\/multi_level_function_pointer.h 23:17@

           __exported by:__ @types\/typedefs\/multi_level_function_pointer.h@
      -}
    deriving stock (Eq, Ord, Show)
    deriving newtype (StaticSize,
                      ReadRaw,
                      WriteRaw,
                      Storable,
                      HasFFIType)
instance TyEq ty (CFieldType F6 "unwrapF6") =>
         HasField "unwrapF6" (Ptr F6) (Ptr ty)
    where getField = fromPtr (Proxy @"unwrapF6")
instance HasCField F6 "unwrapF6"
    where type CFieldType F6 "unwrapF6" = Ptr (FunPtr F6_Aux)
          offset# = \_ -> \_ -> 0
