-- | External kinds.
--
-- See <https://github.com/WebAssembly/binaryen/blob/master/src/binaryen-c.h>
-- for API documentation.
--
-- This module is intended to be imported qualified.

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module Binaryen.ExternalKind where

import Data.Word (Word32)
import Foreign (Storable)

newtype ExternalKind = ExternalKind Word32
  deriving (ExternalKind -> ExternalKind -> Bool
(ExternalKind -> ExternalKind -> Bool)
-> (ExternalKind -> ExternalKind -> Bool) -> Eq ExternalKind
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExternalKind -> ExternalKind -> Bool
$c/= :: ExternalKind -> ExternalKind -> Bool
== :: ExternalKind -> ExternalKind -> Bool
$c== :: ExternalKind -> ExternalKind -> Bool
Eq, Int -> ExternalKind -> ShowS
[ExternalKind] -> ShowS
ExternalKind -> String
(Int -> ExternalKind -> ShowS)
-> (ExternalKind -> String)
-> ([ExternalKind] -> ShowS)
-> Show ExternalKind
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExternalKind] -> ShowS
$cshowList :: [ExternalKind] -> ShowS
show :: ExternalKind -> String
$cshow :: ExternalKind -> String
showsPrec :: Int -> ExternalKind -> ShowS
$cshowsPrec :: Int -> ExternalKind -> ShowS
Show, Ptr b -> Int -> IO ExternalKind
Ptr b -> Int -> ExternalKind -> IO ()
Ptr ExternalKind -> IO ExternalKind
Ptr ExternalKind -> Int -> IO ExternalKind
Ptr ExternalKind -> Int -> ExternalKind -> IO ()
Ptr ExternalKind -> ExternalKind -> IO ()
ExternalKind -> Int
(ExternalKind -> Int)
-> (ExternalKind -> Int)
-> (Ptr ExternalKind -> Int -> IO ExternalKind)
-> (Ptr ExternalKind -> Int -> ExternalKind -> IO ())
-> (forall b. Ptr b -> Int -> IO ExternalKind)
-> (forall b. Ptr b -> Int -> ExternalKind -> IO ())
-> (Ptr ExternalKind -> IO ExternalKind)
-> (Ptr ExternalKind -> ExternalKind -> IO ())
-> Storable ExternalKind
forall b. Ptr b -> Int -> IO ExternalKind
forall b. Ptr b -> Int -> ExternalKind -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr ExternalKind -> ExternalKind -> IO ()
$cpoke :: Ptr ExternalKind -> ExternalKind -> IO ()
peek :: Ptr ExternalKind -> IO ExternalKind
$cpeek :: Ptr ExternalKind -> IO ExternalKind
pokeByteOff :: Ptr b -> Int -> ExternalKind -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> ExternalKind -> IO ()
peekByteOff :: Ptr b -> Int -> IO ExternalKind
$cpeekByteOff :: forall b. Ptr b -> Int -> IO ExternalKind
pokeElemOff :: Ptr ExternalKind -> Int -> ExternalKind -> IO ()
$cpokeElemOff :: Ptr ExternalKind -> Int -> ExternalKind -> IO ()
peekElemOff :: Ptr ExternalKind -> Int -> IO ExternalKind
$cpeekElemOff :: Ptr ExternalKind -> Int -> IO ExternalKind
alignment :: ExternalKind -> Int
$calignment :: ExternalKind -> Int
sizeOf :: ExternalKind -> Int
$csizeOf :: ExternalKind -> Int
Storable)

foreign import ccall unsafe "BinaryenExternalFunction" externalFunction :: ExternalKind
foreign import ccall unsafe "BinaryenExternalTable" externalTable :: ExternalKind
foreign import ccall unsafe "BinaryenExternalMemory" externalMemory :: ExternalKind
foreign import ccall unsafe "BinaryenExternalGlobal" externalGlobal :: ExternalKind
foreign import ccall unsafe "BinaryenExternalEvent" externalEvent :: ExternalKind