lhc-0.6.20081127: src/C/FFI.hs
module C.FFI(
CallConv(..),
Safety(..),
FfiType(..),
FfiExport(..),
FfiSpec(..),
Requires(..)
) where
import Data.Typeable
import Data.DeriveTH
import Data.Derive.All
import Data.Binary
import Data.Monoid
import Control.Monad
type CName = String
data CallConv = CCall | StdCall | Primitive | DotNet deriving(Eq,Ord,Show)
$(derive makeBinary ''CallConv)
data Safety = Safe | Unsafe deriving(Eq,Ord,Show)
$(derive makeBinary ''Safety)
data Requires = Requires {
reqIncludes :: [String],
reqLibraries :: [String]
} deriving(Eq, Ord)
instance Show Requires where
show (Requires [] []) = "()"
show (Requires xs ys) = show (xs,ys)
-- we have to put these after so the instances go in order
$(derive makeBinary ''Requires)
$(derive makeMonoid ''Requires)
data FfiType = Import CName Requires
| ImportAddr CName Requires
| Wrapper
| Dynamic
deriving(Eq,Ord,Show)
$(derive makeBinary ''FfiType)
data FfiSpec = FfiSpec FfiType Safety CallConv
deriving(Eq,Ord,Show)
$(derive makeBinary ''FfiSpec)
data FfiExport = FfiExport CName Safety CallConv
deriving(Eq,Ord,Show,Typeable)
$(derive makeBinary ''FfiExport)