1{-# LANGUAGE CPP #-} 2-- | Unlifted "Foreign". 3-- 4-- @since 0.2.5.0 5 6module UnliftIO.Foreign ( 7 -- * Re-exported modules 8 module Data.Bits 9 , module Data.Int 10 , module Data.Word 11 , module Foreign.C.Types 12 13 -- * Unlifted "Foreign.C.String" 14 , CString 15 , CStringLen 16 , peekCString 17 , peekCStringLen 18 , newCString 19 , newCStringLen 20 , withCString 21 , withCStringLen 22 , charIsRepresentable 23 , castCharToCChar 24 , castCCharToChar 25 , castCharToCUChar 26 , castCUCharToChar 27 , castCharToCSChar 28 , castCSCharToChar 29 , peekCAString 30 , peekCAStringLen 31 , newCAString 32 , newCAStringLen 33 , withCAString 34 , withCAStringLen 35 , CWString 36 , CWStringLen 37 , peekCWString 38 , peekCWStringLen 39 , newCWString 40 , newCWStringLen 41 , withCWString 42 , withCWStringLen 43 44 -- * Unlifted "Foreign.C.Error" 45 , Errno(..) 46 , eOK 47 , e2BIG 48 , eACCES 49 , eADDRINUSE 50 , eADDRNOTAVAIL 51 , eADV 52 , eAFNOSUPPORT 53 , eAGAIN 54 , eALREADY 55 , eBADF 56 , eBADMSG 57 , eBADRPC 58 , eBUSY 59 , eCHILD 60 , eCOMM 61 , eCONNABORTED 62 , eCONNREFUSED 63 , eCONNRESET 64 , eDEADLK 65 , eDESTADDRREQ 66 , eDIRTY 67 , eDOM 68 , eDQUOT 69 , eEXIST 70 , eFAULT 71 , eFBIG 72 , eFTYPE 73 , eHOSTDOWN 74 , eHOSTUNREACH 75 , eIDRM 76 , eILSEQ 77 , eINPROGRESS 78 , eINTR 79 , eINVAL 80 , eIO 81 , eISCONN 82 , eISDIR 83 , eLOOP 84 , eMFILE 85 , eMLINK 86 , eMSGSIZE 87 , eMULTIHOP 88 , eNAMETOOLONG 89 , eNETDOWN 90 , eNETRESET 91 , eNETUNREACH 92 , eNFILE 93 , eNOBUFS 94 , eNODATA 95 , eNODEV 96 , eNOENT 97 , eNOEXEC 98 , eNOLCK 99 , eNOLINK 100 , eNOMEM 101 , eNOMSG 102 , eNONET 103 , eNOPROTOOPT 104 , eNOSPC 105 , eNOSR 106 , eNOSTR 107 , eNOSYS 108 , eNOTBLK 109 , eNOTCONN 110 , eNOTDIR 111 , eNOTEMPTY 112 , eNOTSOCK 113 , eNOTSUP 114 , eNOTTY 115 , eNXIO 116 , eOPNOTSUPP 117 , ePERM 118 , ePFNOSUPPORT 119 , ePIPE 120 , ePROCLIM 121 , ePROCUNAVAIL 122 , ePROGMISMATCH 123 , ePROGUNAVAIL 124 , ePROTO 125 , ePROTONOSUPPORT 126 , ePROTOTYPE 127 , eRANGE 128 , eREMCHG 129 , eREMOTE 130 , eROFS 131 , eRPCMISMATCH 132 , eRREMOTE 133 , eSHUTDOWN 134 , eSOCKTNOSUPPORT 135 , eSPIPE 136 , eSRCH 137 , eSRMNT 138 , eSTALE 139 , eTIME 140 , eTIMEDOUT 141 , eTOOMANYREFS 142 , eTXTBSY 143 , eUSERS 144 , eWOULDBLOCK 145 , eXDEV 146 , isValidErrno 147 , getErrno 148 , resetErrno 149 , errnoToIOError 150 , throwErrno 151 , throwErrnoIf 152 , throwErrnoIf_ 153 , throwErrnoIfRetry 154 , throwErrnoIfRetry_ 155 , throwErrnoIfMinus1 156 , throwErrnoIfMinus1_ 157 , throwErrnoIfMinus1Retry 158 , throwErrnoIfMinus1Retry_ 159 , throwErrnoIfNull 160 , throwErrnoIfNullRetry 161 , throwErrnoIfRetryMayBlock 162 , throwErrnoIfRetryMayBlock_ 163 , throwErrnoIfMinus1RetryMayBlock 164 , throwErrnoIfMinus1RetryMayBlock_ 165 , throwErrnoIfNullRetryMayBlock 166 , throwErrnoPath 167 , throwErrnoPathIf 168 , throwErrnoPathIf_ 169 , throwErrnoPathIfNull 170 , throwErrnoPathIfMinus1 171 , throwErrnoPathIfMinus1_ 172 173 -- * Unlifted "Foreign.Ptr" 174 , Ptr 175 , nullPtr 176 , castPtr 177 , plusPtr 178 , alignPtr 179 , minusPtr 180 , FunPtr 181 , nullFunPtr 182 , castFunPtr 183 , castFunPtrToPtr 184 , castPtrToFunPtr 185 , freeHaskellFunPtr 186 , IntPtr(..) 187 , ptrToIntPtr 188 , intPtrToPtr 189 , WordPtr(..) 190 , ptrToWordPtr 191 , wordPtrToPtr 192 193 -- * Unlifted "Foreign.ForeignPtr" 194 , ForeignPtr 195 , FinalizerPtr 196 , FinalizerEnvPtr 197 , newForeignPtr 198 , newForeignPtr_ 199 , addForeignPtrFinalizer 200 , newForeignPtrEnv 201 , addForeignPtrFinalizerEnv 202 , withForeignPtr 203 , finalizeForeignPtr 204 , touchForeignPtr 205 , castForeignPtr 206#if MIN_VERSION_base(4,10,0) 207 , plusForeignPtr 208#endif 209 , mallocForeignPtr 210 , mallocForeignPtrBytes 211 , mallocForeignPtrArray 212 , mallocForeignPtrArray0 213 , newGHCForeignPtr 214 , addGHCForeignPtrFinalizer 215 , unsafeForeignPtrToPtr 216 217 -- * Unlifted "Foreign.StablePtr" 218 , StablePtr 219 , newStablePtr 220 , deRefStablePtr 221 , freeStablePtr 222 , castStablePtrToPtr 223 , castPtrToStablePtr 224 225 -- * Unlifted "Foreign.Storable" 226 , Storable(..) 227 228 -- * Unlifted "Foreign.Marshal.Alloc" 229 , alloca 230 , allocaBytes 231 , allocaBytesAligned 232 , malloc 233 , mallocBytes 234#if MIN_VERSION_base(4,8,0) 235 , calloc 236 , callocBytes 237#endif 238 , realloc 239 , reallocBytes 240 , free 241 , finalizerFree 242 243 -- * Unlifted "Foreign.Marshal.Array" 244 , mallocArray 245 , mallocArray0 246 , allocaArray 247 , allocaArray0 248 , reallocArray 249 , reallocArray0 250#if MIN_VERSION_base(4,8,0) 251 , callocArray 252 , callocArray0 253#endif 254 , peekArray 255 , peekArray0 256 , pokeArray 257 , pokeArray0 258 , newArray 259 , newArray0 260 , withArray 261 , withArray0 262 , withArrayLen 263 , withArrayLen0 264 , copyArray 265 , moveArray 266 , lengthArray0 267 , advancePtr 268 269 -- * Unlifted "Foreign.Marshal.Error" 270 , throwIf 271 , throwIf_ 272 , throwIfNeg 273 , throwIfNeg_ 274 , throwIfNull 275 276 -- * Unlifted "Foreign.Marshal.Pool" 277 , Pool 278 , newPool 279 , freePool 280 , withPool 281 , pooledMalloc 282 , pooledMallocBytes 283 , pooledRealloc 284 , pooledReallocBytes 285 , pooledMallocArray 286 , pooledMallocArray0 287 , pooledReallocArray 288 , pooledReallocArray0 289 , pooledNew 290 , pooledNewArray 291 , pooledNewArray0 292 293 -- * Unlifted "Foreign.Marshal.Utils" 294 , with 295 , new 296 , fromBool 297 , toBool 298 , maybeNew 299 , maybeWith 300 , maybePeek 301 , withMany 302 , copyBytes 303 , moveBytes 304#if MIN_VERSION_base(4,8,0) 305 , fillBytes 306#endif 307 ) where 308 309import Control.Monad.IO.Unlift 310import Data.Bits 311import Data.Int 312import Data.Word 313import qualified Foreign as F 314import Foreign 315 ( FinalizerEnvPtr 316 , FinalizerPtr 317 , ForeignPtr 318 , FunPtr 319 , IntPtr(..) 320 , Pool 321 , Ptr 322 , StablePtr 323 , Storable(..) 324 , WordPtr(..) 325 , advancePtr 326 , alignPtr 327 , castForeignPtr 328 , castFunPtr 329 , castFunPtrToPtr 330 , castPtr 331 , castPtrToFunPtr 332 , castPtrToStablePtr 333 , castStablePtrToPtr 334 , finalizerFree 335 , fromBool 336 , intPtrToPtr 337 , minusPtr 338 , nullFunPtr 339 , nullPtr 340#if MIN_VERSION_base(4,10,0) 341 , plusForeignPtr 342#endif 343 , plusPtr 344 , ptrToIntPtr 345 , ptrToWordPtr 346 , toBool 347 , withMany 348 , wordPtrToPtr 349 ) 350 351import qualified Foreign.C as F 352import Foreign.C 353 ( CString 354 , CStringLen 355 , CWString 356 , CWStringLen 357 , Errno(..) 358 , castCCharToChar 359 , castCSCharToChar 360 , castCUCharToChar 361 , castCharToCChar 362 , castCharToCSChar 363 , castCharToCSChar 364 , castCharToCUChar 365 , charIsRepresentable 366 , e2BIG 367 , eACCES 368 , eADDRINUSE 369 , eADDRNOTAVAIL 370 , eADV 371 , eAFNOSUPPORT 372 , eAGAIN 373 , eALREADY 374 , eBADF 375 , eBADMSG 376 , eBADRPC 377 , eBUSY 378 , eCHILD 379 , eCOMM 380 , eCONNABORTED 381 , eCONNREFUSED 382 , eCONNRESET 383 , eDEADLK 384 , eDESTADDRREQ 385 , eDIRTY 386 , eDOM 387 , eDQUOT 388 , eEXIST 389 , eFAULT 390 , eFBIG 391 , eFTYPE 392 , eHOSTDOWN 393 , eHOSTUNREACH 394 , eIDRM 395 , eILSEQ 396 , eINPROGRESS 397 , eINTR 398 , eINVAL 399 , eIO 400 , eISCONN 401 , eISDIR 402 , eLOOP 403 , eMFILE 404 , eMLINK 405 , eMSGSIZE 406 , eMULTIHOP 407 , eNAMETOOLONG 408 , eNETDOWN 409 , eNETRESET 410 , eNETUNREACH 411 , eNFILE 412 , eNOBUFS 413 , eNODATA 414 , eNODEV 415 , eNOENT 416 , eNOEXEC 417 , eNOLCK 418 , eNOLINK 419 , eNOMEM 420 , eNOMSG 421 , eNONET 422 , eNOPROTOOPT 423 , eNOSPC 424 , eNOSR 425 , eNOSTR 426 , eNOSYS 427 , eNOTBLK 428 , eNOTCONN 429 , eNOTDIR 430 , eNOTEMPTY 431 , eNOTSOCK 432 , eNOTSUP 433 , eNOTTY 434 , eNXIO 435 , eOK 436 , eOPNOTSUPP 437 , ePERM 438 , ePFNOSUPPORT 439 , ePIPE 440 , ePROCLIM 441 , ePROCUNAVAIL 442 , ePROGMISMATCH 443 , ePROGUNAVAIL 444 , ePROTO 445 , ePROTONOSUPPORT 446 , ePROTOTYPE 447 , eRANGE 448 , eREMCHG 449 , eREMOTE 450 , eROFS 451 , eRPCMISMATCH 452 , eRREMOTE 453 , eSHUTDOWN 454 , eSOCKTNOSUPPORT 455 , eSPIPE 456 , eSRCH 457 , eSRMNT 458 , eSTALE 459 , eTIME 460 , eTIMEDOUT 461 , eTOOMANYREFS 462 , eTXTBSY 463 , eUSERS 464 , eWOULDBLOCK 465 , eXDEV 466 , errnoToIOError 467 , isValidErrno 468 ) 469import Foreign.C.Types 470import qualified Foreign.Concurrent as FC 471import Foreign.ForeignPtr.Unsafe 472 473-- | Lifted 'F.peekCString'. 474-- 475-- @since 0.2.5.0 476{-# INLINE peekCString #-} 477peekCString :: MonadIO m => CString -> m String 478peekCString = liftIO . F.peekCString 479 480-- | Lifted 'F.peekCStringLen'. 481-- 482-- @since 0.2.5.0 483{-# INLINE peekCStringLen #-} 484peekCStringLen :: MonadIO m => CStringLen -> m String 485peekCStringLen = liftIO . F.peekCStringLen 486 487-- | Lifted 'F.newCString'. 488-- 489-- @since 0.2.5.0 490{-# INLINE newCString #-} 491newCString :: MonadIO m => String -> m CString 492newCString = liftIO . F.newCString 493 494-- | Lifted 'F.newCStringLen'. 495-- 496-- @since 0.2.5.0 497{-# INLINE newCStringLen #-} 498newCStringLen :: MonadIO m => String -> m CStringLen 499newCStringLen = liftIO . F.newCStringLen 500 501-- | Unlifted 'F.withCString'. 502-- 503-- @since 0.2.5.0 504{-# INLINE withCString #-} 505withCString :: MonadUnliftIO m => String -> (CString -> m a) -> m a 506withCString s f = withRunInIO (\u -> F.withCString s (u . f)) 507 508-- | Unlifted 'F.withCStringLen'. 509-- 510-- @since 0.2.5.0 511{-# INLINE withCStringLen #-} 512withCStringLen :: MonadUnliftIO m => String -> (CStringLen -> m a) -> m a 513withCStringLen s f = withRunInIO (\u -> F.withCStringLen s (u . f)) 514 515-- | Lifted 'F.peekCAString'. 516-- 517-- @since 0.2.5.0 518{-# INLINE peekCAString #-} 519peekCAString :: MonadIO m => CString -> m String 520peekCAString = liftIO . F.peekCAString 521 522-- | Lifted 'F.peekCAStringLen'. 523-- 524-- @since 0.2.5.0 525{-# INLINE peekCAStringLen #-} 526peekCAStringLen :: MonadIO m => CStringLen -> m String 527peekCAStringLen = liftIO . F.peekCAStringLen 528 529-- | Lifted 'F.newCAString'. 530-- 531-- @since 0.2.5.0 532{-# INLINE newCAString #-} 533newCAString :: MonadIO m => String -> m CString 534newCAString = liftIO . F.newCAString 535 536-- | Lifted 'F.newCAStringLen'. 537-- 538-- @since 0.2.5.0 539{-# INLINE newCAStringLen #-} 540newCAStringLen :: MonadIO m => String -> m CStringLen 541newCAStringLen = liftIO . F.newCAStringLen 542 543-- | Unlifted 'F.withCAString'. 544-- 545-- @since 0.2.5.0 546{-# INLINE withCAString #-} 547withCAString :: MonadUnliftIO m => String -> (CString -> m a) -> m a 548withCAString str f = withRunInIO (\u -> F.withCAString str (u . f)) 549 550-- | Unlifted 'F.withCAStringLen'. 551-- 552-- @since 0.2.5.0 553{-# INLINE withCAStringLen #-} 554withCAStringLen :: MonadUnliftIO m => String -> (CStringLen -> m a) -> m a 555withCAStringLen str f = withRunInIO (\u -> F.withCAStringLen str (u . f)) 556 557-- | Lifted 'F.peekCWString'. 558-- 559-- @since 0.2.5.0 560{-# INLINE peekCWString #-} 561peekCWString :: MonadIO m => CWString -> m String 562peekCWString = liftIO . F.peekCWString 563 564-- | Lifted 'F.peekCWStringLen'. 565-- 566-- @since 0.2.5.0 567{-# INLINE peekCWStringLen #-} 568peekCWStringLen :: MonadIO m => CWStringLen -> m String 569peekCWStringLen = liftIO . F.peekCWStringLen 570 571-- | Lifted 'F.newCWString'. 572-- 573-- @since 0.2.5.0 574{-# INLINE newCWString #-} 575newCWString :: MonadIO m => String -> m CWString 576newCWString = liftIO . F.newCWString 577 578-- | Lifted 'F.newCWStringLen'. 579-- 580-- @since 0.2.5.0 581{-# INLINE newCWStringLen #-} 582newCWStringLen :: MonadIO m => String -> m CWStringLen 583newCWStringLen = liftIO . F.newCWStringLen 584 585-- | Unlifted 'F.withCWString'. 586-- 587-- @since 0.2.5.0 588{-# INLINE withCWString #-} 589withCWString :: MonadUnliftIO m => String -> (CWString -> m a) -> m a 590withCWString str f = withRunInIO (\u -> F.withCWString str (u . f)) 591 592-- | Unlifted 'F.withCWStringLen'. 593-- 594-- @since 0.2.5.0 595{-# INLINE withCWStringLen #-} 596withCWStringLen :: MonadUnliftIO m => String -> (CWStringLen -> m a) -> m a 597withCWStringLen str f = withRunInIO (\u -> F.withCWStringLen str (u . f)) 598 599-- | Lifted 'F.getErrno'. 600-- 601-- @since 0.2.5.0 602{-# INLINE getErrno #-} 603getErrno :: MonadIO m => m Errno 604getErrno = liftIO F.getErrno 605 606-- | Lifted 'F.resetErrno'. 607-- 608-- @since 0.2.5.0 609{-# INLINE resetErrno #-} 610resetErrno :: MonadIO m => m () 611resetErrno = liftIO F.resetErrno 612 613-- | Lifted 'F.throwErrno'. 614-- 615-- @since 0.2.5.0 616{-# INLINE throwErrno #-} 617throwErrno :: MonadIO m => String -> m a 618throwErrno = liftIO . F.throwErrno 619 620-- | Unlifted 'F.throwErrnoIf'. 621-- 622-- @since 0.2.5.0 623{-# INLINE throwErrnoIf #-} 624throwErrnoIf :: MonadUnliftIO m => (a -> Bool) -> String -> m a -> m a 625throwErrnoIf pred_ loc f = withRunInIO (\u -> F.throwErrnoIf pred_ loc (u f)) 626 627-- | Unlifted 'F.throwErrnoIf_'. 628-- 629-- @since 0.2.5.0 630{-# INLINE throwErrnoIf_ #-} 631throwErrnoIf_ :: MonadUnliftIO m => (a -> Bool) -> String -> m a -> m () 632throwErrnoIf_ pred_ loc f = withRunInIO (\u -> F.throwErrnoIf_ pred_ loc (u f)) 633 634-- | Unlifted 'F.throwErrnoIfRetry'. 635-- 636-- @since 0.2.5.0 637{-# INLINE throwErrnoIfRetry #-} 638throwErrnoIfRetry :: MonadUnliftIO m => (a -> Bool) -> String -> m a -> m a 639throwErrnoIfRetry pred_ loc f = 640 withRunInIO (\u -> F.throwErrnoIfRetry pred_ loc (u f)) 641 642-- | Unlifted 'F.throwErrnoIfRetry_'. 643-- 644-- @since 0.2.5.0 645{-# INLINE throwErrnoIfRetry_ #-} 646throwErrnoIfRetry_ :: MonadUnliftIO m => (a -> Bool) -> String -> m a -> m () 647throwErrnoIfRetry_ pred_ loc f = 648 withRunInIO (\u -> F.throwErrnoIfRetry_ pred_ loc (u f)) 649 650-- | Unlifted 'F.throwErrnoIfMinus1'. 651-- 652-- @since 0.2.5.0 653{-# INLINE throwErrnoIfMinus1 #-} 654throwErrnoIfMinus1 :: (MonadUnliftIO m, Eq a, Num a) => String -> m a -> m a 655throwErrnoIfMinus1 loc f = withRunInIO (\u -> F.throwErrnoIfMinus1 loc (u f)) 656 657-- | Unlifted 'F.throwErrnoIfMinus1_' 658-- 659-- @since 0.2.5.0 660{-# INLINE throwErrnoIfMinus1_ #-} 661throwErrnoIfMinus1_ :: (MonadUnliftIO m, Eq a, Num a) => String -> m a -> m () 662throwErrnoIfMinus1_ loc f = withRunInIO (\u -> F.throwErrnoIfMinus1_ loc (u f)) 663 664-- | Unlifted 'F.throwErrnoIfMinus1Retry'. 665-- 666-- @since 0.2.5.0 667{-# INLINE throwErrnoIfMinus1Retry #-} 668throwErrnoIfMinus1Retry :: 669 (MonadUnliftIO m, Eq a, Num a) => String -> m a -> m a 670throwErrnoIfMinus1Retry loc f = 671 withRunInIO (\u -> F.throwErrnoIfMinus1Retry loc (u f)) 672 673-- | Unlifted 'F.throwErrnoIfMinus1Retry_'. 674-- 675-- @since 0.2.5.0 676{-# INLINE throwErrnoIfMinus1Retry_ #-} 677throwErrnoIfMinus1Retry_ :: 678 (MonadUnliftIO m, Eq a, Num a) => String -> m a -> m () 679throwErrnoIfMinus1Retry_ loc f = 680 withRunInIO (\u -> F.throwErrnoIfMinus1Retry_ loc (u f)) 681 682-- | Unlifted 'F.throwErrnoIfNull'. 683-- 684-- @since 0.2.5.0 685{-# INLINE throwErrnoIfNull #-} 686throwErrnoIfNull :: MonadUnliftIO m => String -> m (Ptr a) -> m (Ptr a) 687throwErrnoIfNull loc f = withRunInIO (\u -> F.throwErrnoIfNull loc (u f)) 688 689-- | Unlifted 'F.throwErrnoIfNullRetry'. 690-- 691-- @since 0.2.5.0 692{-# INLINE throwErrnoIfNullRetry #-} 693throwErrnoIfNullRetry :: MonadUnliftIO m => String -> m (Ptr a) -> m (Ptr a) 694throwErrnoIfNullRetry loc f = 695 withRunInIO (\u -> F.throwErrnoIfNullRetry loc (u f)) 696 697-- | Unlifted 'F.throwErrnoIfRetryMayBlock'. 698-- 699-- @since 0.2.5.0 700{-# INLINE throwErrnoIfRetryMayBlock #-} 701throwErrnoIfRetryMayBlock :: 702 MonadUnliftIO m => (a -> Bool) -> String -> m a -> m b -> m a 703throwErrnoIfRetryMayBlock pred_ loc f on_block = 704 withRunInIO (\u -> F.throwErrnoIfRetryMayBlock pred_ loc (u f) (u on_block)) 705 706-- | Unlifted 'F.throwErrnoIfRetryMayBlock_'. 707-- 708-- @since 0.2.5.0 709{-# INLINE throwErrnoIfRetryMayBlock_ #-} 710throwErrnoIfRetryMayBlock_ :: 711 MonadUnliftIO m => (a -> Bool) -> String -> m a -> m b -> m () 712throwErrnoIfRetryMayBlock_ pred_ loc f on_block = 713 withRunInIO (\u -> F.throwErrnoIfRetryMayBlock_ pred_ loc (u f) (u on_block)) 714 715-- | Unlifted 'F.throwErrnoIfMinus1RetryMayBlock'. 716-- 717-- @since 0.2.5.0 718{-# INLINE throwErrnoIfMinus1RetryMayBlock #-} 719throwErrnoIfMinus1RetryMayBlock :: 720 (MonadUnliftIO m, Eq a, Num a) => String -> m a -> m b -> m a 721throwErrnoIfMinus1RetryMayBlock loc f on_block = 722 withRunInIO (\u -> F.throwErrnoIfMinus1RetryMayBlock loc (u f) (u on_block)) 723 724-- | Unlifted 'F.throwErrnoIfMinus1RetryMayBlock_' 725-- 726-- @since 0.2.5.0 727{-# INLINE throwErrnoIfMinus1RetryMayBlock_ #-} 728throwErrnoIfMinus1RetryMayBlock_ :: 729 (MonadUnliftIO m, Eq a, Num a) => String -> m a -> m b -> m () 730throwErrnoIfMinus1RetryMayBlock_ loc f on_block = 731 withRunInIO (\u -> F.throwErrnoIfMinus1RetryMayBlock_ loc (u f) (u on_block)) 732 733-- | Unlifted 'F.throwErrnoIfNullRetryMayBlock'. 734-- 735-- @since 0.2.5.0 736{-# INLINE throwErrnoIfNullRetryMayBlock #-} 737throwErrnoIfNullRetryMayBlock :: 738 MonadUnliftIO m => String -> m (Ptr a) -> m b -> m (Ptr a) 739throwErrnoIfNullRetryMayBlock loc f on_block = 740 withRunInIO (\u -> F.throwErrnoIfNullRetryMayBlock loc (u f) (u on_block)) 741 742-- | Lifted 'F.throwErrnoPath'. 743-- 744-- @since 0.2.5.0 745{-# INLINE throwErrnoPath #-} 746throwErrnoPath :: MonadIO m => String -> FilePath -> m a 747throwErrnoPath loc path = liftIO (F.throwErrnoPath loc path) 748 749-- | Unlifted 'F.throwErrnoPathIf'. 750-- 751-- @since 0.2.5.0 752{-# INLINE throwErrnoPathIf #-} 753throwErrnoPathIf :: 754 MonadUnliftIO m => (a -> Bool) -> String -> FilePath -> m a -> m a 755throwErrnoPathIf pred_ loc path f = 756 withRunInIO (\u -> F.throwErrnoPathIf pred_ loc path (u f)) 757 758-- | Unlifted 'F.throwErrnoPathIf_'. 759-- 760-- @since 0.2.5.0 761{-# INLINE throwErrnoPathIf_ #-} 762throwErrnoPathIf_ :: 763 MonadUnliftIO m => (a -> Bool) -> String -> FilePath -> m a -> m () 764throwErrnoPathIf_ pred_ loc path f = 765 withRunInIO (\u -> F.throwErrnoPathIf_ pred_ loc path (u f)) 766 767-- | Unlifted 'F.throwErrnoPathIfNull'. 768-- 769-- @since 0.2.5.0 770{-# INLINE throwErrnoPathIfNull #-} 771throwErrnoPathIfNull :: 772 MonadUnliftIO m => String -> FilePath -> m (Ptr a) -> m (Ptr a) 773throwErrnoPathIfNull loc path f = 774 withRunInIO (\u -> F.throwErrnoPathIfNull loc path (u f)) 775 776-- | Unlifted 'F.throwErrnoPathIfMinus1'. 777-- 778-- @since 0.2.5.0 779{-# INLINE throwErrnoPathIfMinus1 #-} 780throwErrnoPathIfMinus1 :: 781 (MonadUnliftIO m, Eq a, Num a) => String -> FilePath -> m a -> m a 782throwErrnoPathIfMinus1 loc path f = 783 withRunInIO (\u -> F.throwErrnoPathIfMinus1 loc path (u f)) 784 785-- | Unlifted 'F.throwErrnoPathIfMinus1_'. 786-- 787-- @since 0.2.5.0 788{-# INLINE throwErrnoPathIfMinus1_ #-} 789throwErrnoPathIfMinus1_ :: 790 (MonadUnliftIO m, Eq a, Num a) => String -> FilePath -> m a -> m () 791throwErrnoPathIfMinus1_ loc path f = 792 withRunInIO (\u -> F.throwErrnoPathIfMinus1_ loc path (u f)) 793 794-- | Lifted 'F.freeHaskellFunPtr'. 795-- 796-- @since 0.2.5.0 797{-# INLINE freeHaskellFunPtr #-} 798freeHaskellFunPtr :: MonadIO m => FunPtr a -> m () 799freeHaskellFunPtr = liftIO . F.freeHaskellFunPtr 800 801-- | Lifted 'F.newForeignPtr'. 802-- 803-- @since 0.2.5.0 804{-# INLINE newForeignPtr #-} 805newForeignPtr :: MonadIO m => FinalizerPtr a -> Ptr a -> m (ForeignPtr a) 806newForeignPtr finalizer p = liftIO (F.newForeignPtr finalizer p) 807 808-- | Lifted 'F.newForeignPtr_'. 809-- 810-- @since 0.2.5.0 811{-# INLINE newForeignPtr_ #-} 812newForeignPtr_ :: MonadIO m => Ptr a -> m (ForeignPtr a) 813newForeignPtr_ = liftIO . F.newForeignPtr_ 814 815-- | Lifted 'F.addForeignPtrFinalizer'. 816-- 817-- @since 0.2.5.0 818{-# INLINE addForeignPtrFinalizer #-} 819addForeignPtrFinalizer :: MonadIO m => FinalizerPtr a -> ForeignPtr a -> m () 820addForeignPtrFinalizer finalizer_ptr foreign_ptr = 821 liftIO (F.addForeignPtrFinalizer finalizer_ptr foreign_ptr) 822 823-- | Lifted 'F.newForeignPtrEnv'. 824-- 825-- @since 0.2.5.0 826{-# INLINE newForeignPtrEnv #-} 827newForeignPtrEnv :: 828 MonadIO m => FinalizerEnvPtr env a -> Ptr env -> Ptr a -> m (ForeignPtr a) 829newForeignPtrEnv finalizer env p = liftIO (F.newForeignPtrEnv finalizer env p) 830 831-- | Lifted 'F.addForeignPtrFinalizerEnv'. 832-- 833-- @since 0.2.5.0 834{-# INLINE addForeignPtrFinalizerEnv #-} 835addForeignPtrFinalizerEnv :: 836 MonadIO m => FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> m () 837addForeignPtrFinalizerEnv finalizer env fp = 838 liftIO (F.addForeignPtrFinalizerEnv finalizer env fp) 839 840-- | Unlifted 'F.withForeignPtr'. 841-- 842-- @since 0.2.5.0 843{-# INLINE withForeignPtr #-} 844withForeignPtr :: MonadUnliftIO m => ForeignPtr a -> (Ptr a -> m b) -> m b 845withForeignPtr fo io = withRunInIO (\u -> F.withForeignPtr fo (u . io)) 846 847-- | Lifted 'F.finalizeForeignPtr'. 848-- 849-- @since 0.2.5.0 850{-# INLINE finalizeForeignPtr #-} 851finalizeForeignPtr :: MonadIO m => ForeignPtr a -> m () 852finalizeForeignPtr = liftIO . F.finalizeForeignPtr 853 854-- | Lifted 'F.touchForeignPtr'. 855-- 856-- @since 0.2.5.0 857{-# INLINE touchForeignPtr #-} 858touchForeignPtr :: MonadIO m => ForeignPtr a -> m () 859touchForeignPtr = liftIO . F.touchForeignPtr 860 861-- | Lifted 'F.mallocForeignPtr'. 862-- 863-- @since 0.2.5.0 864{-# INLINE mallocForeignPtr #-} 865mallocForeignPtr :: (MonadIO m, Storable a) => m (ForeignPtr a) 866mallocForeignPtr = liftIO F.mallocForeignPtr 867 868-- | Lifted 'F.mallocForeignPtrBytes'. 869-- 870-- @since 0.2.5.0 871{-# INLINE mallocForeignPtrBytes #-} 872mallocForeignPtrBytes :: MonadIO m => Int -> m (ForeignPtr a) 873mallocForeignPtrBytes = liftIO . F.mallocForeignPtrBytes 874 875-- | Lifted 'F.mallocForeignPtrArray'. 876-- 877-- @since 0.2.5.0 878{-# INLINE mallocForeignPtrArray #-} 879mallocForeignPtrArray :: (MonadIO m, Storable a) => Int -> m (ForeignPtr a) 880mallocForeignPtrArray = liftIO . F.mallocForeignPtrArray 881 882-- | Lifted 'F.mallocForeignPtrArray0'. 883-- 884-- @since 0.2.5.0 885{-# INLINE mallocForeignPtrArray0 #-} 886mallocForeignPtrArray0 :: (MonadIO m, Storable a) => Int -> m (ForeignPtr a) 887mallocForeignPtrArray0 = liftIO . F.mallocForeignPtrArray0 888 889-- | Unlifted 'FC.newForeignPtr'. 890-- 891-- @since 0.2.5.0 892{-# INLINE newGHCForeignPtr #-} 893newGHCForeignPtr :: MonadUnliftIO m => Ptr a -> m () -> m (ForeignPtr a) 894newGHCForeignPtr ptr f = withRunInIO (\u -> FC.newForeignPtr ptr (u f)) 895 896-- | Unlifted 'FC.addForeignPtrFinalizer'. 897-- 898-- @since 0.2.5.0 899{-# INLINE addGHCForeignPtrFinalizer #-} 900addGHCForeignPtrFinalizer :: MonadUnliftIO m => ForeignPtr a -> m () -> m () 901addGHCForeignPtrFinalizer fptr f = 902 withRunInIO (\u -> FC.addForeignPtrFinalizer fptr (u f)) 903 904-- | Lifted 'F.newStablePtr'. 905-- 906-- @since 0.2.5.0 907{-# INLINE newStablePtr #-} 908newStablePtr :: MonadIO m => a -> m (StablePtr a) 909newStablePtr = liftIO . F.newStablePtr 910 911-- | Lifted 'F.deRefStablePtr'. 912-- 913-- @since 0.2.5.0 914{-# INLINE deRefStablePtr #-} 915deRefStablePtr :: MonadIO m => StablePtr a -> m a 916deRefStablePtr = liftIO . F.deRefStablePtr 917 918-- | Lifted 'F.freeStablePtr'. 919-- 920-- @since 0.2.5.0 921{-# INLINE freeStablePtr #-} 922freeStablePtr :: MonadIO m => StablePtr a -> m () 923freeStablePtr = liftIO . F.freeStablePtr 924 925-- | Unlifted 'F.alloca'. 926-- 927-- @since 0.2.5.0 928{-# INLINE alloca #-} 929alloca :: (MonadUnliftIO m, Storable a) => (Ptr a -> m b) -> m b 930alloca action = withRunInIO (\u -> F.alloca (u . action)) 931 932-- | Unlifted 'F.allocaBytes'. 933-- 934-- @since 0.2.5.0 935{-# INLINE allocaBytes #-} 936allocaBytes :: MonadUnliftIO m => Int -> (Ptr a -> m b) -> m b 937allocaBytes size action = withRunInIO (\u -> F.allocaBytes size (u . action)) 938 939-- | Unlifted 'F.allocaBytesAligned'. 940-- 941-- @since 0.2.5.0 942{-# INLINE allocaBytesAligned #-} 943allocaBytesAligned :: MonadUnliftIO m => Int -> Int -> (Ptr a -> m b) -> m b 944allocaBytesAligned size align action = 945 withRunInIO (\u -> F.allocaBytesAligned size align (u . action)) 946 947-- | Lifted 'F.malloc'. 948-- 949-- @since 0.2.5.0 950{-# INLINE malloc #-} 951malloc :: (MonadIO m, Storable a) => m (Ptr a) 952malloc = liftIO F.malloc 953 954-- | Lifted 'F.mallocBytes'. 955-- 956-- @since 0.2.5.0 957{-# INLINE mallocBytes #-} 958mallocBytes :: MonadIO m => Int -> m (Ptr a) 959mallocBytes = liftIO . F.mallocBytes 960 961#if MIN_VERSION_base(4,8,0) 962-- | Lifted 'F.calloc'. 963-- 964-- @since 0.2.5.0 965{-# INLINE calloc #-} 966calloc :: (MonadIO m, Storable a) => m (Ptr a) 967calloc = liftIO F.calloc 968 969-- | Lifted 'F.callocBytes'. 970-- 971-- @since 0.2.5.0 972{-# INLINE callocBytes #-} 973callocBytes :: MonadIO m => Int -> m (Ptr a) 974callocBytes = liftIO . F.callocBytes 975#endif 976 977-- | Lifted 'F.realloc'. 978-- 979-- @since 0.2.5.0 980{-# INLINE realloc #-} 981realloc :: (MonadIO m, Storable b) => Ptr a -> m (Ptr b) 982realloc = liftIO . F.realloc 983 984-- | Lifted 'F.reallocBytes'. 985-- 986-- @since 0.2.5.0 987{-# INLINE reallocBytes #-} 988reallocBytes :: MonadIO m => Ptr a -> Int -> m (Ptr a) 989reallocBytes ptr size = liftIO (F.reallocBytes ptr size) 990 991-- | Lifted 'F.free'. 992-- 993-- @since 0.2.5.0 994{-# INLINE free #-} 995free :: MonadIO m => Ptr a -> m () 996free = liftIO . F.free 997 998-- | Lifted 'F.mallocArray'. 999-- 1000-- @since 0.2.5.0 1001{-# INLINE mallocArray #-} 1002mallocArray :: (MonadIO m, Storable a) => Int -> m (Ptr a) 1003mallocArray = liftIO . F.mallocArray 1004 1005-- | Lifted 'F.mallocArray0'. 1006-- 1007-- @since 0.2.5.0 1008{-# INLINE mallocArray0 #-} 1009mallocArray0 :: (MonadIO m, Storable a) => Int -> m (Ptr a) 1010mallocArray0 = liftIO . F.mallocArray 1011 1012-- | Unlifted 'F.allocaArray'. 1013-- 1014-- @since 0.2.5.0 1015{-# INLINE allocaArray #-} 1016allocaArray :: (MonadUnliftIO m, Storable a) => Int -> (Ptr a -> m b) -> m b 1017allocaArray size action = withRunInIO (\u -> F.allocaArray size (u . action)) 1018 1019-- | Unlifted 'F.allocaArray0'. 1020-- 1021-- @since 0.2.5.0 1022{-# INLINE allocaArray0 #-} 1023allocaArray0 :: (MonadUnliftIO m, Storable a) => Int -> (Ptr a -> m b) -> m b 1024allocaArray0 size action = withRunInIO (\u -> F.allocaArray0 size (u . action)) 1025 1026-- | Lifted 'F.reallocArray'. 1027-- 1028-- @since 0.2.5.0 1029{-# INLINE reallocArray #-} 1030reallocArray :: (MonadIO m, Storable a) => Ptr a -> Int -> m (Ptr a) 1031reallocArray ptr size = liftIO (F.reallocArray ptr size) 1032 1033-- | Lifted 'F.reallocArray0'. 1034-- 1035-- @since 0.2.5.0 1036{-# INLINE reallocArray0 #-} 1037reallocArray0 :: (MonadIO m, Storable a) => Ptr a -> Int -> m (Ptr a) 1038reallocArray0 ptr size = liftIO (F.reallocArray0 ptr size) 1039 1040#if MIN_VERSION_base(4,8,0) 1041-- | Lifted 'F.callocArray'. 1042-- 1043-- @since 0.2.5.0 1044{-# INLINE callocArray #-} 1045callocArray :: (MonadIO m, Storable a) => Int -> m (Ptr a) 1046callocArray = liftIO . F.callocArray 1047 1048-- | Lifted 'F.callocArray0'. 1049-- 1050-- @since 0.2.5.0 1051{-# INLINE callocArray0 #-} 1052callocArray0 :: (MonadIO m, Storable a) => Int -> m (Ptr a) 1053callocArray0 = liftIO . F.callocArray0 1054#endif 1055 1056-- | Lifted 'F.peekArray'. 1057-- 1058-- @since 0.2.5.0 1059{-# INLINE peekArray #-} 1060peekArray :: (MonadIO m, Storable a) => Int -> Ptr a -> m [a] 1061peekArray size ptr = liftIO (F.peekArray size ptr) 1062 1063-- | Lifted 'F.peekArray0'. 1064-- 1065-- @since 0.2.5.0 1066{-# INLINE peekArray0 #-} 1067peekArray0 :: (MonadIO m, Storable a, Eq a) => a -> Ptr a -> m [a] 1068peekArray0 marker ptr = liftIO (F.peekArray0 marker ptr) 1069 1070-- | Lifted 'F.pokeArray'. 1071-- 1072-- @since 0.2.5.0 1073{-# INLINE pokeArray #-} 1074pokeArray :: (MonadIO m, Storable a) => Ptr a -> [a] -> m () 1075pokeArray ptr vals0 = liftIO (F.pokeArray ptr vals0) 1076 1077-- | Lifted 'F.pokeArray0'. 1078-- 1079-- @since 0.2.5.0 1080{-# INLINE pokeArray0 #-} 1081pokeArray0 :: (MonadIO m, Storable a) => a -> Ptr a -> [a] -> m () 1082pokeArray0 marker ptr vals0 = liftIO (F.pokeArray0 marker ptr vals0) 1083 1084-- | Lifted 'F.newArray'. 1085-- 1086-- @since 0.2.5.0 1087{-# INLINE newArray #-} 1088newArray :: (MonadIO m, Storable a) => [a] -> m (Ptr a) 1089newArray = liftIO . F.newArray 1090 1091-- | Lifted 'F.newArray0' 1092-- 1093-- @since 0.2.5.0 1094{-# INLINE newArray0 #-} 1095newArray0 :: (MonadIO m, Storable a) => a -> [a] -> m (Ptr a) 1096newArray0 marker vals = liftIO (F.newArray0 marker vals) 1097 1098-- | Unlifted 'F.withArray'. 1099-- 1100-- @since 0.2.5.0 1101{-# INLINE withArray #-} 1102withArray :: (MonadUnliftIO m, Storable a) => [a] -> (Ptr a -> m b) -> m b 1103withArray vals action = withRunInIO (\u -> F.withArray vals (u . action)) 1104 1105-- | Unlifted 'F.withArray0'. 1106-- 1107-- @since 0.2.5.0 1108{-# INLINE withArray0 #-} 1109withArray0 :: (MonadUnliftIO m, Storable a) => a -> [a] -> (Ptr a -> m b) -> m b 1110withArray0 marker vals action = 1111 withRunInIO (\u -> F.withArray0 marker vals (u . action)) 1112 1113-- | Unlifted 'F.withArrayLen'. 1114-- 1115-- @since 0.2.5.0 1116{-# INLINE withArrayLen #-} 1117withArrayLen :: 1118 (MonadUnliftIO m, Storable a) => [a] -> (Int -> Ptr a -> m b) -> m b 1119withArrayLen vals f = 1120 withRunInIO (\u -> F.withArrayLen vals (\s p -> u (f s p))) 1121 1122-- | Unlifted 'F.withArrayLen0'. 1123-- 1124-- @since 0.2.5.0 1125{-# INLINE withArrayLen0 #-} 1126withArrayLen0 :: 1127 (MonadUnliftIO m, Storable a) => a -> [a] -> (Int -> Ptr a -> m b) -> m b 1128withArrayLen0 marker vals f = 1129 withRunInIO (\u -> F.withArrayLen0 marker vals (\s p -> u (f s p))) 1130 1131-- | Lifted 'F.copyArray'. 1132-- 1133-- @since 0.2.5.0 1134{-# INLINE copyArray #-} 1135copyArray :: (MonadIO m, Storable a) => Ptr a -> Ptr a -> Int -> m () 1136copyArray dest src size = liftIO (F.copyArray dest src size) 1137 1138-- | Lifted 'F.moveArray'. 1139-- 1140-- @since 0.2.5.0 1141{-# INLINE moveArray #-} 1142moveArray :: (MonadIO m, Storable a) => Ptr a -> Ptr a -> Int -> m () 1143moveArray dest src size = liftIO (F.moveArray dest src size) 1144 1145-- | Lifted 'F.lengthArray0'. 1146-- 1147-- @since 0.2.5.0 1148{-# INLINE lengthArray0 #-} 1149lengthArray0 :: (MonadIO m, Storable a, Eq a) => a -> Ptr a -> m Int 1150lengthArray0 marker ptr = liftIO (F.lengthArray0 marker ptr) 1151 1152-- | Unlifted 'F.throwIf'. 1153-- 1154-- @since 0.2.5.0 1155{-# INLINE throwIf #-} 1156throwIf :: MonadUnliftIO m => (a -> Bool) -> (a -> String) -> m a -> m a 1157throwIf pred_ msgfct act = withRunInIO (\u -> F.throwIf pred_ msgfct (u act)) 1158 1159-- | Unlifted 'F.throwIf_'. 1160-- 1161-- @since 0.2.5.0 1162{-# INLINE throwIf_ #-} 1163throwIf_ :: MonadUnliftIO m => (a -> Bool) -> (a -> String) -> m a -> m () 1164throwIf_ pred_ msgfct act = withRunInIO (\u -> F.throwIf_ pred_ msgfct (u act)) 1165 1166-- | Unlifted 'F.throwIfNeg'. 1167-- 1168-- @since 0.2.5.0 1169{-# INLINE throwIfNeg #-} 1170throwIfNeg :: (MonadUnliftIO m, Ord a, Num a) => (a -> String) -> m a -> m a 1171throwIfNeg msgfct act = withRunInIO (\u -> F.throwIfNeg msgfct (u act)) 1172 1173-- | Unlifted 'F.throwIfNeg_'. 1174-- 1175-- @since 0.2.5.0 1176{-# INLINE throwIfNeg_ #-} 1177throwIfNeg_ :: (MonadUnliftIO m, Ord a, Num a) => (a -> String) -> m a -> m () 1178throwIfNeg_ msgfct act = withRunInIO (\u -> F.throwIfNeg_ msgfct (u act)) 1179 1180-- | Unlifted 'F.throwIfNull'. 1181-- 1182-- @since 0.2.5.0 1183{-# INLINE throwIfNull #-} 1184throwIfNull :: MonadUnliftIO m => String -> m (Ptr a) -> m (Ptr a) 1185throwIfNull msg act = withRunInIO (\u -> F.throwIfNull msg (u act)) 1186 1187-- | Lifted 'F.newPool'. 1188-- 1189-- @since 0.2.5.0 1190{-# INLINE newPool #-} 1191newPool :: MonadIO m => m Pool 1192newPool = liftIO F.newPool 1193 1194-- | Lifted 'F.freePool'. 1195-- 1196-- @since 0.2.5.0 1197{-# INLINE freePool #-} 1198freePool :: MonadIO m => Pool -> m () 1199freePool = liftIO . F.freePool 1200 1201-- | Unlifted 'F.withPool'. 1202-- 1203-- @since 0.2.5.0 1204{-# INLINE withPool #-} 1205withPool :: MonadUnliftIO m => (Pool -> m b) -> m b 1206withPool act = withRunInIO (\u -> F.withPool (u . act)) 1207 1208-- | Lifted 'F.pooledMalloc'. 1209-- 1210-- @since 0.2.5.0 1211{-# INLINE pooledMalloc #-} 1212pooledMalloc :: (MonadIO m, Storable a) => Pool -> m (Ptr a) 1213pooledMalloc = liftIO . F.pooledMalloc 1214 1215-- | Lifted 'F.pooledMallocBytes'. 1216-- 1217-- @since 0.2.5.0 1218{-# INLINE pooledMallocBytes #-} 1219pooledMallocBytes :: MonadIO m => Pool -> Int -> m (Ptr a) 1220pooledMallocBytes pool size = liftIO (F.pooledMallocBytes pool size) 1221 1222-- | Lifted 'F.pooledRealloc'. 1223-- 1224-- @since 0.2.5.0 1225{-# INLINE pooledRealloc #-} 1226pooledRealloc :: (MonadIO m, Storable a) => Pool -> Ptr a -> m (Ptr a) 1227pooledRealloc pool ptr = liftIO (F.pooledRealloc pool ptr) 1228 1229-- | Lifted 'F.pooledReallocBytes'. 1230-- 1231-- @since 0.2.5.0 1232{-# INLINE pooledReallocBytes #-} 1233pooledReallocBytes :: MonadIO m => Pool -> Ptr a -> Int -> m (Ptr a) 1234pooledReallocBytes pool ptr size = liftIO (F.pooledReallocBytes pool ptr size) 1235 1236-- | Lifted 'F.pooledMallocArray'. 1237-- 1238-- @since 0.2.5.0 1239{-# INLINE pooledMallocArray #-} 1240pooledMallocArray :: (MonadIO m, Storable a) => Pool -> Int -> m (Ptr a) 1241pooledMallocArray pool size = liftIO (F.pooledMallocArray pool size) 1242 1243-- | Lifted 'F.pooledMallocArray0'. 1244-- 1245-- @since 0.2.5.0 1246{-# INLINE pooledMallocArray0 #-} 1247pooledMallocArray0 :: (MonadIO m, Storable a) => Pool -> Int -> m (Ptr a) 1248pooledMallocArray0 pool size = liftIO (F.pooledMallocArray0 pool size) 1249 1250-- | Lifted 'F.pooledReallocArray'. 1251-- 1252-- @since 0.2.5.0 1253{-# INLINE pooledReallocArray #-} 1254pooledReallocArray :: 1255 (MonadIO m, Storable a) => Pool -> Ptr a -> Int -> m (Ptr a) 1256pooledReallocArray pool ptr size = liftIO (F.pooledReallocArray pool ptr size) 1257 1258-- | Lifted 'F.pooledReallocArray0'. 1259-- 1260-- @since 0.2.5.0 1261{-# INLINE pooledReallocArray0 #-} 1262pooledReallocArray0 :: 1263 (MonadIO m, Storable a) => Pool -> Ptr a -> Int -> m (Ptr a) 1264pooledReallocArray0 pool ptr size = liftIO (F.pooledReallocArray0 pool ptr size) 1265 1266-- | Lifted 'F.pooledNew'. 1267-- 1268-- @since 0.2.5.0 1269{-# INLINE pooledNew #-} 1270pooledNew :: (MonadIO m, Storable a) => Pool -> a -> m (Ptr a) 1271pooledNew pool val = liftIO (F.pooledNew pool val) 1272 1273-- | Lifted 'F.pooledNewArray'. 1274-- 1275-- @since 0.2.5.0 1276{-# INLINE pooledNewArray #-} 1277pooledNewArray :: (MonadIO m, Storable a) => Pool -> [a] -> m (Ptr a) 1278pooledNewArray pool vals = liftIO (F.pooledNewArray pool vals) 1279 1280-- | Lifted 'F.pooledNewArray0'. 1281-- 1282-- @since 0.2.5.0 1283{-# INLINE pooledNewArray0 #-} 1284pooledNewArray0 :: (MonadIO m, Storable a) => Pool -> a -> [a] -> m (Ptr a) 1285pooledNewArray0 pool marker vals = liftIO (F.pooledNewArray0 pool marker vals) 1286 1287-- | Unlifted 'F.with'. 1288-- 1289-- @since 0.2.5.0 1290{-# INLINE with #-} 1291with :: (MonadUnliftIO m, Storable a) => a -> (Ptr a -> m b) -> m b 1292with val f = withRunInIO (\u -> F.with val (u . f)) 1293 1294-- | Lifted 'F.new'. 1295-- 1296-- @since 0.2.5.0 1297{-# INLINE new #-} 1298new :: (MonadIO m, Storable a) => a -> m (Ptr a) 1299new = liftIO . F.new 1300 1301-- | Lifted 'F.maybeNew'. 1302-- 1303-- @since 0.2.5.0 1304{-# INLINE maybeNew #-} 1305maybeNew :: MonadIO m => (a -> m (Ptr b)) -> Maybe a -> m (Ptr b) 1306maybeNew = maybe (return nullPtr) 1307 1308-- | Lifted 'F.maybeWith'. 1309-- 1310-- @since 0.2.5.0 1311{-# INLINE maybeWith #-} 1312maybeWith :: 1313 MonadIO m 1314 => (a -> (Ptr b -> m c) -> m c) 1315 -> Maybe a 1316 -> (Ptr b -> m c) 1317 -> m c 1318maybeWith = maybe ($ nullPtr) 1319 1320-- | Unlifted 'F.maybePeek'. 1321-- 1322-- @since 0.2.5.0 1323{-# INLINE maybePeek #-} 1324maybePeek :: MonadUnliftIO m => (Ptr a -> m b) -> Ptr a -> m (Maybe b) 1325maybePeek peek_ ptr = withRunInIO (\u -> F.maybePeek (u . peek_) ptr) 1326 1327-- | Lifted 'F.copyBytes'. 1328-- 1329-- @since 0.2.5.0 1330{-# INLINE copyBytes #-} 1331copyBytes :: MonadIO m => Ptr a -> Ptr a -> Int -> m () 1332copyBytes dest src size = liftIO (F.copyBytes dest src size) 1333 1334-- | Lifted 'F.moveBytes'. 1335-- 1336-- @since 0.2.5.0 1337{-# INLINE moveBytes #-} 1338moveBytes :: MonadIO m => Ptr a -> Ptr a -> Int -> m () 1339moveBytes dest src size = liftIO (F.moveBytes dest src size) 1340 1341#if MIN_VERSION_base(4,8,0) 1342-- | Lifted 'F.fillBytes'. 1343-- 1344-- @since 0.2.5.0 1345{-# INLINE fillBytes #-} 1346fillBytes :: MonadIO m => Ptr a -> Word8 -> Int -> m () 1347fillBytes dest char size = liftIO (F.fillBytes dest char size) 1348#endif 1349