llvm-3.2.0.1: examples/Convert.hs
{-# LANGUAGE ForeignFunctionInterface, FlexibleInstances #-}
module Convert(Convert(..)) where
import Data.Int
import Data.Word
import Foreign.Ptr (FunPtr)
type Importer f = FunPtr f -> f
class Convert f where
convert :: Importer f
foreign import ccall safe "dynamic" c_IOFloat :: Importer (IO Float)
instance Convert (IO Float) where convert = c_IOFloat
foreign import ccall safe "dynamic" c_Float_IOFloat :: Importer (Float -> IO Float)
instance Convert (Float -> IO Float) where convert = c_Float_IOFloat
foreign import ccall safe "dynamic" c_Float_Float :: Importer (Float -> Float)
instance Convert (Float -> Float) where convert = c_Float_Float
foreign import ccall safe "dynamic" c_IODouble :: Importer (IO Double)
instance Convert (IO Double) where convert = c_IODouble
foreign import ccall safe "dynamic" c_Double_IODouble :: Importer (Double -> IO Double)
instance Convert (Double -> IO Double) where convert = c_Double_IODouble
foreign import ccall safe "dynamic" c_Double_Double :: Importer (Double -> Double)
instance Convert (Double -> Double) where convert = c_Double_Double
foreign import ccall safe "dynamic" c_Word32_IOWord32 :: Importer (Word32 -> IO Word32)
instance Convert (Word32 -> IO Word32) where convert = c_Word32_IOWord32
foreign import ccall safe "dynamic" c_Word32_Word32 :: Importer (Word32 -> Word32)
instance Convert (Word32 -> Word32) where convert = c_Word32_Word32
foreign import ccall safe "dynamic" c_Int32_IOInt32 :: Importer (Int32 -> IO Int32)
instance Convert (Int32 -> IO Int32) where convert = c_Int32_IOInt32
foreign import ccall safe "dynamic" c_Int32_Int32 :: Importer (Int32 -> Int32)
instance Convert (Int32 -> Int32) where convert = c_Int32_Int32