-- | Exceptions which can be thrown by FontConfig. module Graphics.Text.Font.Choose.Result (FcException(..), throwBool, throwNull, throwString) where import Foreign.Ptr (Ptr, nullPtr) import Text.Read (readMaybe) import Control.Exception (Exception, throwIO) data FcException = ErrType | ErrNoId | ErrOOM | ErrOther deriving (Read, Show, Eq, Enum) instance Exception FcException throwBool :: Bool -> IO () throwBool False = throwIO ErrOOM throwBool True = return () throwNull :: Ptr a -> IO (Ptr a) throwNull a | a == nullPtr = throwIO ErrOOM | otherwise = return a throwString :: String -> IO () throwString a | Just b <- readMaybe a :: Maybe FcException = throwIO b | otherwise = return ()