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