{-# OPTIONS_HADDOCK hide, prune, ignore-exports #-} module Data.Number.Flint.NF.Fmpzi.Instances where import System.IO.Unsafe import Foreign.C.String import Foreign.Marshal.Alloc ( free ) import Data.Number.Flint.NF.Fmpzi instance Show Fmpzi where show :: Fmpzi -> String show Fmpzi x = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do (Fmpzi _, CString cs) <- forall {a}. Fmpzi -> (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withFmpzi Fmpzi x Ptr CFmpzi -> IO CString fmpzi_get_str String s <- CString -> IO String peekCString CString cs forall a. Ptr a -> IO () free CString cs forall (m :: * -> *) a. Monad m => a -> m a return String s instance Eq Fmpzi where == :: Fmpzi -> Fmpzi -> Bool (==) Fmpzi x Fmpzi y = forall a b. (a, b) -> b snd forall a b. (a -> b) -> a -> b $ forall a b. (a, b) -> b snd forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ forall {a}. Fmpzi -> (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withFmpzi Fmpzi x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzi x -> forall {a}. Fmpzi -> (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withFmpzi Fmpzi y forall a b. (a -> b) -> a -> b $ \Ptr CFmpzi y -> do CInt result <- Ptr CFmpzi -> Ptr CFmpzi -> IO CInt fmpzi_equal Ptr CFmpzi x Ptr CFmpzi y forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ CInt result forall a. Eq a => a -> a -> Bool == CInt 1 instance Num Fmpzi where {-# INLINE (+) #-} + :: Fmpzi -> Fmpzi -> Fmpzi (+) = forall {a}. (Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO a) -> Fmpzi -> Fmpzi -> Fmpzi lift2 Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO () fmpzi_add {-# INLINE (-) #-} (-) = forall {a}. (Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO a) -> Fmpzi -> Fmpzi -> Fmpzi lift2 Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO () fmpzi_sub {-# INLINE (*) #-} * :: Fmpzi -> Fmpzi -> Fmpzi (*) = forall {a}. (Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO a) -> Fmpzi -> Fmpzi -> Fmpzi lift2 Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO () fmpzi_mul negate :: Fmpzi -> Fmpzi negate = forall {a}. (Ptr CFmpzi -> Ptr CFmpzi -> IO a) -> Fmpzi -> Fmpzi lift1 Ptr CFmpzi -> Ptr CFmpzi -> IO () fmpzi_neg abs :: Fmpzi -> Fmpzi abs = forall a. HasCallStack => a undefined fromInteger :: Integer -> Fmpzi fromInteger Integer x = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do Fmpzi result <- IO Fmpzi newFmpzi forall {a}. Fmpzi -> (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withFmpzi Fmpzi result forall a b. (a -> b) -> a -> b $ \Ptr CFmpzi result -> do Ptr CFmpzi -> CLong -> CLong -> IO () fmpzi_set_si_si Ptr CFmpzi result (forall a. Num a => Integer -> a fromInteger Integer x) CLong 1 forall (m :: * -> *) a. Monad m => a -> m a return Fmpzi result signum :: Fmpzi -> Fmpzi signum = forall a. HasCallStack => a undefined lift1 :: (Ptr CFmpzi -> Ptr CFmpzi -> IO a) -> Fmpzi -> Fmpzi lift1 Ptr CFmpzi -> Ptr CFmpzi -> IO a f Fmpzi x = forall a b. (a, b) -> a fst forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ forall {a}. (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withNewFmpzi forall a b. (a -> b) -> a -> b $ \Ptr CFmpzi result -> forall {a}. Fmpzi -> (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withFmpzi Fmpzi x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzi x -> Ptr CFmpzi -> Ptr CFmpzi -> IO a f Ptr CFmpzi result Ptr CFmpzi x lift2 :: (Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO a) -> Fmpzi -> Fmpzi -> Fmpzi lift2 Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO a f Fmpzi x Fmpzi y = forall a b. (a, b) -> a fst forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ forall {a}. (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withNewFmpzi forall a b. (a -> b) -> a -> b $ \Ptr CFmpzi result -> forall {a}. Fmpzi -> (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withFmpzi Fmpzi x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzi x -> forall {a}. Fmpzi -> (Ptr CFmpzi -> IO a) -> IO (Fmpzi, a) withFmpzi Fmpzi y forall a b. (a -> b) -> a -> b $ \Ptr CFmpzi y -> Ptr CFmpzi -> Ptr CFmpzi -> Ptr CFmpzi -> IO a f Ptr CFmpzi result Ptr CFmpzi x Ptr CFmpzi y