module Data.Number.Flint.Fmpz.Mat.Instances where import System.IO.Unsafe import Foreign.C.String import Foreign.Marshal.Alloc ( free ) import Foreign.Storable import Data.Number.Flint.Fmpz.Mat instance Show FmpzMat where show :: FmpzMat -> String show FmpzMat x = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do (FmpzMat _, CString cs) <- forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x Ptr CFmpzMat -> IO CString fmpz_mat_get_str_pretty 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 FmpzMat where == :: FmpzMat -> FmpzMat -> Bool (==) FmpzMat x FmpzMat y = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do (FmpzMat _, (FmpzMat _, CInt flag)) <- forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat y forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat y -> do Ptr CFmpzMat -> Ptr CFmpzMat -> IO CInt fmpz_mat_equal Ptr CFmpzMat x Ptr CFmpzMat y forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ CInt flag forall a. Eq a => a -> a -> Bool == CInt 1 instance Num FmpzMat where + :: FmpzMat -> FmpzMat -> FmpzMat (+) = forall {a}. (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat -> FmpzMat lift2 Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO () fmpz_mat_add (-) = forall {a}. (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat -> FmpzMat lift2 Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO () fmpz_mat_sub * :: FmpzMat -> FmpzMat -> FmpzMat (*) = forall {a}. (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat -> FmpzMat lift2 Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO () fmpz_mat_mul negate :: FmpzMat -> FmpzMat negate = forall {a}. (Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat lift1 Ptr CFmpzMat -> Ptr CFmpzMat -> IO () fmpz_mat_neg fromInteger :: Integer -> FmpzMat fromInteger = forall a. HasCallStack => a undefined signum :: FmpzMat -> FmpzMat signum = forall a. HasCallStack => a undefined abs :: FmpzMat -> FmpzMat abs = forall a. HasCallStack => a undefined instance Semigroup FmpzMat where <> :: FmpzMat -> FmpzMat -> FmpzMat (<>) = forall a. Num a => a -> a -> a (*) lift1 :: (Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat lift1 Ptr CFmpzMat -> Ptr CFmpzMat -> IO a f FmpzMat x = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do (FmpzMat _, (CLong nx, CLong mx)) <- forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do CFmpzMat Ptr CFmpz _ CLong nx CLong mx Ptr (Ptr CFmpz) _ <- forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzMat x forall (m :: * -> *) a. Monad m => a -> m a return (CLong nx, CLong mx) FmpzMat result <- CLong -> CLong -> IO FmpzMat newFmpzMat CLong nx CLong mx forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat result forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat result -> do Ptr CFmpzMat -> Ptr CFmpzMat -> IO a f Ptr CFmpzMat result Ptr CFmpzMat x forall (m :: * -> *) a. Monad m => a -> m a return FmpzMat result lift2 :: (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat -> FmpzMat lift2 Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a f FmpzMat x FmpzMat y = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do (FmpzMat _, (CLong nx, CLong mx)) <- forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do CFmpzMat Ptr CFmpz _ CLong nx CLong mx Ptr (Ptr CFmpz) _ <- forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzMat x forall (m :: * -> *) a. Monad m => a -> m a return (CLong nx, CLong mx) (FmpzMat _, (CLong ny, CLong my)) <- forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat y forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat y -> do CFmpzMat Ptr CFmpz _ CLong ny CLong my Ptr (Ptr CFmpz) _ <- forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzMat y forall (m :: * -> *) a. Monad m => a -> m a return (CLong ny, CLong my) FmpzMat result <- CLong -> CLong -> IO FmpzMat newFmpzMat CLong nx CLong my forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat result forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat z -> do forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat y forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat y -> do Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a f Ptr CFmpzMat z Ptr CFmpzMat x Ptr CFmpzMat y forall (m :: * -> *) a. Monad m => a -> m a return FmpzMat result