# FFI_C

data CFnPtr : Type -> Type
  MkCFnPtr : (x : t) -> CFnPtr t
data C_FnTypes : Type -> Type
  C_Fn : C_Types s -> C_FnTypes t -> C_FnTypes (s -> t)
  C_FnIO : C_Types t -> C_FnTypes (IO' FFI_C t)
  C_FnBase : C_Types t -> C_FnTypes t
data C_IntTypes : Type -> Type

  Supported C integer types

  C_IntChar : C_IntTypes Char
  C_IntNative : C_IntTypes Int
  C_IntBits8 : C_IntTypes Bits8
  C_IntBits16 : C_IntTypes Bits16
  C_IntBits32 : C_IntTypes Bits32
  C_IntBits64 : C_IntTypes Bits64
data C_Types : Type -> Type

  Supported C foreign types

  C_Str : C_Types String
  C_Float : C_Types Double
  C_Ptr : C_Types Ptr
  C_MPtr : C_Types ManagedPtr
  C_Unit : C_Types ()
  C_Any : C_Types (Raw a)
  C_FnT : C_FnTypes t -> C_Types (CFnPtr t)
  C_IntT : C_IntTypes i -> C_Types i
  C_CData : C_Types CData
FFI_C : FFI

  A descriptor for the C FFI. See the constructors of `C_Types`
  and `C_IntTypes` for the concrete types that are available.

data Raw : Type -> Type
  MkRaw : (x : t) -> Raw t