{- |
   Module     : Data.Convertible.Instances.C
   Copyright  : Copyright (C) 2009-2011 John Goerzen
   License    : BSD3

   Maintainer : John Goerzen <jgoerzen@complete.org>
   Stability  : provisional
   Portability: portable

Numeric instances for Convertible for C types.  See comments in
"Data.Convertible.Instances.Num".

Copyright (C) 2009-2011 John Goerzen <jgoerzen@complete.org>

All rights reserved.

For license and copyright information, see the file LICENSE
-}
module Data.Convertible.Instances.C()
where

import Data.Convertible.Base
import Data.Convertible.Utils
import Data.Convertible.Instances.Num()
import Data.Int
import Data.Word
import Foreign.C.Types

-- remainder of this file generated by utils/genCinstances.hs

-- Section 1
instance Convertible CFloat Int where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Int8 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int8 CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Int16 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int16 CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Int32 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int32 CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Int64 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int64 CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Word where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Word8 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word8 CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Word16 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word16 CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Word32 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word32 CFloat where
    safeConvert = return . fromIntegral

instance Convertible CFloat Word64 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word64 CFloat where
    safeConvert = return . fromIntegral

instance Convertible CDouble Int where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Int8 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int8 CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Int16 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int16 CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Int32 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int32 CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Int64 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Int64 CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Word where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Word8 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word8 CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Word16 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word16 CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Word32 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word32 CDouble where
    safeConvert = return . fromIntegral

instance Convertible CDouble Word64 where
    safeConvert = boundedConversion (return . truncate)
instance Convertible Word64 CDouble where
    safeConvert = return . fromIntegral

-- Section 2
instance Convertible CFloat Double where
    safeConvert = return . realToFrac
instance Convertible Double CFloat where
    safeConvert = return . realToFrac

instance Convertible CFloat Float where
    safeConvert = return . realToFrac
instance Convertible Float CFloat where
    safeConvert = return . realToFrac

instance Convertible CFloat Rational where
    safeConvert = return . realToFrac
instance Convertible Rational CFloat where
    safeConvert = return . realToFrac

instance Convertible CDouble Double where
    safeConvert = return . realToFrac
instance Convertible Double CDouble where
    safeConvert = return . realToFrac

instance Convertible CDouble Float where
    safeConvert = return . realToFrac
instance Convertible Float CDouble where
    safeConvert = return . realToFrac

instance Convertible CDouble Rational where
    safeConvert = return . realToFrac
instance Convertible Rational CDouble where
    safeConvert = return . realToFrac

-- Section 3
instance Convertible CChar Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Int where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Int8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int8 CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Int16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int16 CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Int32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int32 CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Int64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Int64 CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Word where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Word8 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word8 CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Word16 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word16 CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Word32 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word32 CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Word64 where
    safeConvert = boundedConversion (return . fromIntegral)
instance Convertible Word64 CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

-- Section 4
instance Convertible CChar CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CChar CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

-- Section 5
instance Convertible CFloat CDouble where
    safeConvert = return . realToFrac

instance Convertible CDouble CFloat where
    safeConvert = return . realToFrac

-- Section 6
instance Convertible CFloat Integer where
    safeConvert = return . truncate
instance Convertible Integer CFloat where
    safeConvert = return . fromIntegral

instance Convertible CDouble Integer where
    safeConvert = return . truncate
instance Convertible Integer CDouble where
    safeConvert = return . fromIntegral

-- Section 7
instance Convertible CChar Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSChar Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CSChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUChar Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CUChar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CShort Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUShort Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CUShort where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CInt Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CUInt Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CUInt where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLong Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULong Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CULong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CSize Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CSize where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CWchar Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CWchar where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CLLong Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CLLong where
    safeConvert = boundedConversion (return . fromIntegral)

instance Convertible CULLong Integer where
    safeConvert = return . fromIntegral
instance Convertible Integer CULLong where
    safeConvert = boundedConversion (return . fromIntegral)

-- Section 8o
instance Convertible CChar Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CChar where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CSChar Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CSChar where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CUChar Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CUChar where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CShort Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CShort where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CUShort Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CUShort where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CInt Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CInt where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CUInt Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CUInt where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CLong Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CLong where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CULong Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CULong where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CSize Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CSize where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CWchar Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CWchar where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CLLong Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CLLong where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

instance Convertible CULLong Char where
    safeConvert = boundedConversion (return . toEnum . fromIntegral)
instance Convertible Char CULLong where
    safeConvert = boundedConversion (return . fromIntegral . fromEnum)

