{-# LINE 1 "src/LLVM/FFI/Base.hsc" #-}
{-# LANGUAGE Safe #-}
module LLVM.FFI.Base where

-- import Foreign.ForeignPtr (FinalizerPtr) -- unsafe before GHC-7.10
import Foreign.Ptr (Ptr, FunPtr)

import qualified Data.Bool as Bool
import Data.Int (Int32)

import Prelude
         (IO, Eq, Enum, Show, fromIntegral, show, fromEnum, toEnum, (.), (==))




type FinalizerPtr a = FunPtr (Ptr a -> IO ())


newtype Bool = Bool (Int32)
{-# LINE 20 "src/LLVM/FFI/Base.hsc" #-}
    deriving (Eq)

instance Enum Bool where
    fromEnum :: Bool -> Int
fromEnum (Bool Int32
b) = Int32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int32
b
    toEnum :: Int -> Bool
toEnum = Int32 -> Bool
Bool (Int32 -> Bool) -> (Int -> Int32) -> Int -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral

instance Show Bool where
    show :: Bool -> String
show Bool
b = if Bool
b Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
== Bool
false then String
"false" else String
"true"

false, true :: Bool
false :: Bool
false = Int32 -> Bool
Bool Int32
0; true :: Bool
true = Int32 -> Bool
Bool Int32
1

consBool :: Bool.Bool -> Bool
consBool :: Bool -> Bool
consBool = Int -> Bool
forall a. Enum a => Int -> a
toEnum (Int -> Bool) -> (Bool -> Int) -> Bool -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum

deconsBool :: Bool -> Bool.Bool
deconsBool :: Bool -> Bool
deconsBool = Int -> Bool
forall a. Enum a => Int -> a
toEnum (Int -> Bool) -> (Bool -> Int) -> Bool -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum