hmpfr 0.1 → 0.1.1
raw patch · 8 files changed
+117/−192 lines, 8 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Data/Number/MPFR/Arithmetic.hs +2/−7
- Data/Number/MPFR/Assignment.hs +24/−60
- Data/Number/MPFR/FFIhelper.hsc +21/−3
- Data/Number/MPFR/Integer.hs +2/−2
- Data/Number/MPFR/Internal.hs +38/−80
- Data/Number/MPFR/Misc.hs +18/−18
- Data/Number/MPFR/Special.hs +10/−20
- hmpfr.cabal +2/−2
Data/Number/MPFR/Arithmetic.hs view
@@ -191,13 +191,8 @@ wpoww_ :: RoundMode -> Precision -> Word -> Word -> (MPFR , Int) wpoww_ r p d1 d2 = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do - r2 <- mpfr_ui_pow_ui p1 (fromIntegral d1) (fromIntegral d2) ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ where go = do withDummy p $ \p1 -> do + mpfr_ui_pow_ui p1 (fromIntegral d1) (fromIntegral d2) ((fromIntegral . fromEnum) r) wpow_ :: RoundMode -> Precision -> Word -> MPFR -> (MPFR , Int) wpow_ r p d1 d2 = withMPFRBAiu r p (fromIntegral d1) d2 mpfr_ui_pow
Data/Number/MPFR/Assignment.hs view
@@ -26,14 +26,9 @@ set_ :: RoundMode -> Precision -> MPFR -> (MPFR, Int) set_ r p mp1 = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do+ where go = do withDummy p $ \p1 -> do with mp1 $ \p2 -> do - r2 <- mpfr_set p1 p2 ((fromIntegral . fromEnum) r) - r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ mpfr_set p1 p2 ((fromIntegral . fromEnum) r) fromWord :: RoundMode -> Precision -> Word -> MPFR fromWord r p d = fst $ fromWord_ r p d@@ -46,34 +41,19 @@ fromWord_ :: RoundMode -> Precision -> Word -> (MPFR, Int) fromWord_ r p d = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do - r2 <- mpfr_set_ui p1 (fromIntegral d) ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2) + where go = do withDummy p $ \p1 -> do + mpfr_set_ui p1 (fromIntegral d) ((fromIntegral . fromEnum) r) fromInt_ :: RoundMode -> Precision -> Int -> (MPFR, Int) fromInt_ r p d = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do - r2 <- mpfr_set_si p1 (fromIntegral d) ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)-+ where go = do withDummy p $ \p1 -> do+ mpfr_set_si p1 (fromIntegral d) ((fromIntegral . fromEnum) r)+ fromDouble_ :: RoundMode -> Precision -> Double -> (MPFR, Int) fromDouble_ r p d = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do - r2 <- mpfr_set_d p1 (realToFrac d) ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)- + where go = do withDummy p $ \p1 -> do + mpfr_set_d p1 (realToFrac d) ((fromIntegral . fromEnum) r)+ -- x * 2 ^ y int2w :: RoundMode -> Precision -> Word -> Int -> MPFR int2w r p i e = fst $ int2w_ r p i e@@ -83,25 +63,14 @@ int2w_ :: RoundMode -> Precision -> Word -> Int -> (MPFR, Int) int2w_ r p i e = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do- r2 <- mpfr_set_ui_2exp p1 (fromIntegral i) (fromIntegral e) ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)-+ where go = do withDummy p $ \p1 -> do+ mpfr_set_ui_2exp p1 (fromIntegral i) (fromIntegral e) ((fromIntegral . fromEnum) r)+ int2i_ :: RoundMode -> Precision -> Int -> Int -> (MPFR, Int) int2i_ r p i e = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do- r2 <- mpfr_set_si_2exp p1 (fromIntegral i) (fromIntegral e) ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)--+ where go = do withDummy p $ \p1 -> do+ mpfr_set_si_2exp p1 (fromIntegral i) (fromIntegral e) ((fromIntegral . fromEnum) r)+ stringToMPFR :: RoundMode -> Precision -> Word -- ^ Base -> String -> MPFR@@ -111,14 +80,9 @@ -> Word -- ^ Base -> String -> (MPFR, Int) stringToMPFR_ r p b d = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do + where go = do withDummy p $ \p1 -> do withCString d $ \p2 -> do - r2 <- mpfr_set_str p1 p2 (fromIntegral b) ((fromIntegral . fromEnum) r) - r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ mpfr_set_str p1 p2 (fromIntegral b) ((fromIntegral . fromEnum) r) strtofr :: RoundMode -> Precision -> Word -- ^ base@@ -132,8 +96,8 @@ strtofr_ r p b d = unsafePerformIO go where go = do ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do + alloca $ \p1 -> do + pokeDummy p1 fp p withCString d $ \p2 -> do alloca $ \p3 -> do r3 <- mpfr_strtofr p1 p2 p3 (fromIntegral b) ((fromIntegral . fromEnum) r)@@ -147,8 +111,8 @@ setInf p i = unsafePerformIO go where go = do ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do + alloca $ \p1 -> do + pokeDummy p1 fp p mpfr_set_inf p1 (fromIntegral i) peekP p1 fp @@ -156,8 +120,8 @@ setNaN p = unsafePerformIO go where go = do ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do + alloca $ \p1 -> do + pokeDummy p1 fp p mpfr_set_nan p1 peekP p1 fp
Data/Number/MPFR/FFIhelper.hsc view
@@ -11,9 +11,9 @@ import Foreign.C.String(CString) import Foreign.C.Types(CULong, CLong, CInt, CUInt, CDouble, CChar) import Foreign.Ptr(FunPtr, Ptr)-+import Foreign.Marshal(alloca) import Foreign.Storable-import Foreign.ForeignPtr (ForeignPtr, withForeignPtr)+import Foreign.ForeignPtr (ForeignPtr, withForeignPtr, mallocForeignPtrBytes) import Data.Typeable(Typeable) @@ -50,12 +50,30 @@ #{poke __mpfr_struct, _mpfr_sign} p s #{poke __mpfr_struct, _mpfr_exp} p e withForeignPtr fp $ \p1 -> #{poke __mpfr_struct, _mpfr_d} p p1-+{-# INLINE peekP #-} peekP :: Ptr MPFR -> ForeignPtr Limb -> IO MPFR peekP p fp = do r11 <- #{peek __mpfr_struct, _mpfr_prec} p r21 <- #{peek __mpfr_struct, _mpfr_sign} p r22 <- #{peek __mpfr_struct, _mpfr_exp} p return (MP r11 r21 r22 fp)+{-# INLINE withDummy #-}+withDummy :: Word -> (Ptr MPFR -> IO CInt) -> IO (MPFR, Int)+withDummy w f = do alloca $ \ptr -> do+ ls <- mpfr_custom_get_size (fromIntegral w)+ fp <- mallocForeignPtrBytes (fromIntegral ls)+ #{poke __mpfr_struct, _mpfr_prec} ptr (fromIntegral w :: CPrecision)+ #{poke __mpfr_struct, _mpfr_sign} ptr (1 :: Sign) + #{poke __mpfr_struct, _mpfr_exp} ptr (0 :: Exp)+ withForeignPtr fp $ \p1 -> #{poke __mpfr_struct, _mpfr_d} ptr p1+ r2 <- f ptr+ r1 <- peekP ptr fp+ return (r1, fromIntegral r2)++pokeDummy :: Ptr MPFR -> ForeignPtr Limb -> Word -> IO ()+pokeDummy ptr fp p = do #{poke __mpfr_struct, _mpfr_prec} ptr (fromIntegral p :: CPrecision)+ #{poke __mpfr_struct, _mpfr_sign} ptr (0 :: Sign) + #{poke __mpfr_struct, _mpfr_exp} ptr (0 :: Exp)+ withForeignPtr fp $ \p1 -> #{poke __mpfr_struct, _mpfr_d} ptr p1 bitsPerMPLimb :: Int bitsPerMPLimb = 8 * #size mp_limb_t
Data/Number/MPFR/Integer.hs view
@@ -92,8 +92,8 @@ remquo_ r p d d' = unsafePerformIO go where go = do ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do + alloca $ \p1 -> do+ pokeDummy p1 fp p with d $ \p2 -> do with d' $ \p3 -> do alloca $ \p4 -> do
Data/Number/MPFR/Internal.hs view
@@ -34,147 +34,105 @@ -> (Ptr MPFR -> Ptr MPFR -> Ptr MPFR -> CRoundMode -> IO CInt) -> (MPFR, Int) withMPFRsBA r p !mp1 !mp2 f = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- with mp1 $! \p2 -> do- with mp2 $! \p3 -> do- r2 <- f p1 p2 p3 ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ where go = do withDummy p $ \p1 -> do+ with mp1 $ \p2 -> do+ with mp2 $ \p3 -> do+ f p1 p2 p3 ((fromIntegral . fromEnum) r)+ {-# INLINE withMPFRBAui #-} withMPFRBAui :: RoundMode -> Precision -> MPFR -> CULong -> (Ptr MPFR -> Ptr MPFR -> CULong -> CRoundMode -> IO CInt) -> (MPFR, Int) withMPFRBAui r p !mp1 d f = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- with mp1 $! \p2 -> do- r2 <- f p1 p2 d ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ where go = do withDummy p $ \p1 -> do+ with mp1 $ \p2 -> do+ f p1 p2 d ((fromIntegral . fromEnum) r) {-# INLINE withMPFRBAsi #-} withMPFRBAsi :: RoundMode -> Precision -> MPFR -> CLong -> (Ptr MPFR -> Ptr MPFR -> CLong -> CRoundMode -> IO CInt) -> (MPFR, Int) withMPFRBAsi r p !mp1 d f = unsafePerformIO go - where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- with mp1 $! \p2 -> do- r2 <- f p1 p2 d ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ where go = do withDummy p $ \p1 -> do+ with mp1 $ \p2 -> do+ f p1 p2 d ((fromIntegral . fromEnum) r) {-# INLINE withMPFRBAiu #-} withMPFRBAiu :: RoundMode -> Precision -> CULong -> MPFR -> (Ptr MPFR -> CULong -> Ptr MPFR -> CRoundMode -> IO CInt) -> (MPFR, Int) withMPFRBAiu r p d !mp1 f = unsafePerformIO go - where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- with mp1 $! \p2 -> do- r2 <- f p1 d p2 ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)-+ where go = do withDummy p $ \p1 -> do+ with mp1 $ \p2 -> do+ f p1 d p2 ((fromIntegral . fromEnum) r)+ {-# INLINE withMPFRBAis #-} withMPFRBAis :: RoundMode -> Precision -> CLong -> MPFR -> (Ptr MPFR -> CLong -> Ptr MPFR -> CRoundMode -> IO CInt) -> (MPFR, Int) withMPFRBAis r p d !mp1 f = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- with mp1 $! \p2 -> do- r2 <- f p1 d p2 ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)-+ where go = do withDummy p $ \p1 -> do+ with mp1 $ \p2 -> do+ f p1 d p2 ((fromIntegral . fromEnum) r)+ {-# INLINE withMPFRB #-} withMPFRB :: MPFR -> (Ptr MPFR -> IO CInt) -> CInt withMPFRB mp1 !f = unsafePerformIO go- where go = with mp1 $! \p1 -> f p1+ where go = with mp1 $ \p1 -> f p1 withMPFRP :: MPFR -> (Ptr MPFR -> IO CPrecision) -> CPrecision withMPFRP mp1 !f = unsafePerformIO go- where go = with mp1 $! \p1 -> f p1+ where go = with mp1 $ \p1 -> f p1 {-# INLINE withMPFR #-} withMPFR :: RoundMode -> Precision -> MPFR -> (Ptr MPFR -> Ptr MPFR -> CRoundMode -> IO CInt) -> (MPFR, Int) withMPFR r p !mp1 f = unsafePerformIO go - where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- with mp1 $! \p2 -> do- r2 <- f p1 p2 ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)- + where go = do withDummy p $ \p1 -> do+ with mp1 $ \p2 -> do+ f p1 p2 ((fromIntegral . fromEnum) r)+ {-# INLINE withMPFRBB #-} withMPFRBB :: MPFR -> MPFR -> (Ptr MPFR -> Ptr MPFR -> IO CInt) -> CInt withMPFRBB mp1 mp2 f = unsafePerformIO go- where go = do with mp1 $! \p1 -> do - with mp2 $! \p2 -> do + where go = do with mp1 $ \p1 -> do + with mp2 $ \p2 -> do f p1 p2 {-# INLINE withMPFRC #-} withMPFRC :: RoundMode -> Precision -> (Ptr MPFR -> CRoundMode -> IO CInt) -> (MPFR, Int) withMPFRC r p f = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- r2 <- f p1 ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ where go = do withDummy p $ \p1 -> do+ f p1 ((fromIntegral . fromEnum) r) withMPFRF :: MPFR -> RoundMode -> (Ptr MPFR -> CRoundMode -> IO CInt) -> Int withMPFRF !mp1 r f = (fromIntegral . unsafePerformIO) go- where go = do with mp1 $! \p1 -> f p1 ((fromIntegral . fromEnum) r)+ where go = do with mp1 $ \p1 -> f p1 ((fromIntegral . fromEnum) r) {-# INLINE withMPFRUI #-} withMPFRUI :: RoundMode -> Precision -> Word -> (Ptr MPFR -> CULong -> CRoundMode -> IO CInt) -> (MPFR, Int) withMPFRUI r p d f = unsafePerformIO go - where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- r2 <- f p1 (fromIntegral d) ((fromIntegral . fromEnum) r)- r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ where go = do withDummy p $ \p1 -> do+ f p1 (fromIntegral d) ((fromIntegral . fromEnum) r)+ {-# INLINE withMPFRR #-} withMPFRR :: Precision -> MPFR -> (Ptr MPFR -> Ptr MPFR -> IO CInt) -> (MPFR, Int) withMPFRR p d f = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $! \p1 -> do- with d $! \p2 -> do- r2 <- f p1 p2- r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ where go = do withDummy p $ \p1 -> do+ with d $ \p2 -> do+ f p1 p2+ checkPrec :: Precision -> Precision@@ -182,7 +140,7 @@ getMantissa' :: MPFR -> [Limb] getMantissa' (MP p _ _ p1) = unsafePerformIO go- where go = do withForeignPtr p1 $! \pt -> do + where go = do withForeignPtr p1 $ \pt -> do arr <- peekArray (Prelude.ceiling ((fromIntegral p ::Double) / fromIntegral bitsPerMPLimb)) pt ; return arr
Data/Number/MPFR/Misc.hs view
@@ -22,11 +22,11 @@ nextToward :: MPFR -> MPFR -> MPFR nextToward mp1 mp2 = unsafePerformIO go- where go = do let p = fromIntegral (getPrec mp1)- ls <- mpfr_custom_get_size p+ where go = do let p = getPrec mp1+ ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP p 0 0 fp- with dummy $ \p1 -> do+ alloca $ \p1 -> do+ pokeDummy p1 fp p with mp1 $ \p2 -> do with mp2 $ \p3 -> do _ <- mpfr_set p1 p2 ((fromIntegral . fromEnum) Near) @@ -36,11 +36,11 @@ nextAbove :: MPFR -> MPFR nextAbove mp1 = unsafePerformIO go- where go = do let p = fromIntegral (getPrec mp1)- ls <- mpfr_custom_get_size p+ where go = do let p = getPrec mp1+ ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP p 0 0 fp- with dummy $ \p1 -> do+ alloca $ \p1 -> do+ pokeDummy p1 fp p with mp1 $ \p2 -> do _ <- mpfr_set p1 p2 ((fromIntegral . fromEnum) Near) mpfr_nextabove p1 @@ -48,11 +48,11 @@ nextBelow :: MPFR -> MPFR nextBelow mp1 = unsafePerformIO go- where go = do let p = fromIntegral (getPrec mp1)- ls <- mpfr_custom_get_size p+ where go = do let p = getPrec mp1+ ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP p 0 0 fp- with dummy $ \p1 -> do+ alloca $ \p1 -> do+ pokeDummy p1 fp p with mp1 $ \p2 -> do _ <- mpfr_set p1 p2 ((fromIntegral . fromEnum) Near) mpfr_nextbelow p1 @@ -67,8 +67,8 @@ random2 :: Precision -> MpSize -> Exp -> IO MPFR random2 p m e = do ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do+ alloca $ \p1 -> do+ pokeDummy p1 fp p mpfr_random2 p1 m e peekP p1 fp @@ -78,11 +78,11 @@ setExp :: MPFR -> Exp -> MPFR setExp d e = unsafePerformIO go- where go = do let p = fromIntegral (getPrec d)- ls <- mpfr_custom_get_size p+ where go = do let p = getPrec d+ ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP p 0 0 fp- with dummy $ \p1 -> do+ alloca $ \p1 -> do+ pokeDummy p1 fp p with d $ \p2 -> do mpfr_set p1 p2 ((fromIntegral . fromEnum) Near) mpfr_set_exp p1 e
Data/Number/MPFR/Special.hs view
@@ -222,12 +222,12 @@ sincos_ r p p' d = unsafePerformIO go where go = do ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp ls' <- mpfr_custom_get_size (fromIntegral p') fp' <- mallocForeignPtrBytes (fromIntegral ls')- let dummy' = MP (fromIntegral p') 0 0 fp'- with dummy $ \p1 -> do - with dummy' $ \p2 -> do + alloca $ \p1 -> do + pokeDummy p1 fp (fromIntegral ls)+ alloca $ \p2 -> do + pokeDummy p2 fp' (fromIntegral ls') with d $ \p3 -> do r3 <- mpfr_sin_cos p1 p2 p3 ((fromIntegral . fromEnum) r) r1 <- peekP p1 fp@@ -295,8 +295,8 @@ lgamma_ r p d = unsafePerformIO go where go = do ls <- mpfr_custom_get_size (fromIntegral p) fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do+ alloca $ \p1 -> do+ pokeDummy p1 fp (fromIntegral ls) with d $ \p2 -> do alloca $ \p3 -> do r3 <- mpfr_lgamma p1 p3 p2 ((fromIntegral . fromEnum) r)@@ -336,29 +336,19 @@ fma_ :: RoundMode -> Precision -> MPFR -> MPFR -> MPFR -> (MPFR, Int) fma_ r p mp1 mp2 mp3 = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do+ where go = do withDummy p $ \p1 -> do with mp1 $ \p2 -> do with mp2 $ \p3 -> do with mp3 $ \p4 -> do - r2 <- mpfr_fma p1 p2 p3 p4 ((fromIntegral . fromEnum) r) - r1 <- peekP p1 fp - return (r1, fromIntegral r2)+ mpfr_fma p1 p2 p3 p4 ((fromIntegral . fromEnum) r) fms_ :: RoundMode -> Precision -> MPFR -> MPFR -> MPFR -> (MPFR, Int) fms_ r p mp1 mp2 mp3 = unsafePerformIO go- where go = do ls <- mpfr_custom_get_size (fromIntegral p)- fp <- mallocForeignPtrBytes (fromIntegral ls)- let dummy = MP (fromIntegral p) 0 0 fp- with dummy $ \p1 -> do+ where go = do withDummy p $ \p1 -> do with mp1 $ \p2 -> do with mp2 $ \p3 -> do with mp3 $ \p4 -> do - r2 <- mpfr_fms p1 p2 p3 p4 ((fromIntegral . fromEnum) r) - r1 <- peekP p1 fp- return (r1, fromIntegral r2)+ mpfr_fms p1 p2 p3 p4 ((fromIntegral . fromEnum) r) agm_ :: RoundMode -> Precision -> MPFR -> MPFR -> (MPFR,Int) agm_ r p d1 d2 = withMPFRsBA r p d1 d2 mpfr_agm
hmpfr.cabal view
@@ -1,5 +1,5 @@ name: hmpfr-version: 0.1+version: 0.1.1 synopsis: Haskell binding to MPFR library description: Haskell binding to MPFR library. Tested with MPFR 2.3.1 and 2.3.2. Some simple examples of usage can be found in test/Demo.hs.@@ -39,7 +39,7 @@ build-type: Simple build-tools: hsc2hs-GHC-options: -Wall -fno-warn-orphans -O2+GHC-options: -Wall -fno-warn-orphans -O2 -fvia-C -optc-O2 GHC-prof-options: -prof -auto-all include-dirs: cbits includes: chsmpfr.h mpfr.h