-- GENERATED by C->Haskell Compiler, version 0.28.8 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Data/PhoneNumber/Internal/Common.chs" #-}
module Data.PhoneNumber.Internal.Common where
import qualified Foreign.C.Types as C2HSImp



import Control.Arrow
import Data.ByteString (ByteString)
import Data.ByteString.Unsafe
import Foreign
import Foreign.C.Types



alloca2 :: (Storable a, Storable b) => ((Ptr a, Ptr b) -> IO c) -> IO c
alloca2 :: forall a b c.
(Storable a, Storable b) =>
((Ptr a, Ptr b) -> IO c) -> IO c
alloca2 (Ptr a, Ptr b) -> IO c
k = forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca forall a b. (a -> b) -> a -> b
$ \Ptr a
p1 -> forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca forall a b. (a -> b) -> a -> b
$ \Ptr b
p2 -> (Ptr a, Ptr b) -> IO c
k (Ptr a
p1, Ptr b
p2)

withByteString :: ByteString -> ((Ptr CChar, (C2HSImp.CULong)) -> IO a) -> IO a
withByteString :: forall a. ByteString -> ((Ptr CChar, CULong) -> IO a) -> IO a
withByteString ByteString
bs (Ptr CChar, CULong) -> IO a
k = forall a. ByteString -> (CStringLen -> IO a) -> IO a
unsafeUseAsCStringLen ByteString
bs forall a b. (a -> b) -> a -> b
$ (Ptr CChar, CULong) -> IO a
k forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second forall a b. (Integral a, Num b) => a -> b
fromIntegral

-- Any #fun using acquireCString must be wrapped in a mask, so that an exception
-- cannot arrive before we assign a finalizer to the string
acquireCString :: Ptr CChar -> (C2HSImp.CULong) -> IO ByteString
acquireCString :: Ptr CChar -> CULong -> IO ByteString
acquireCString = forall a b c. ((a, b) -> c) -> a -> b -> c
curry forall a b. (a -> b) -> a -> b
$ CStringLen -> IO ByteString
unsafePackMallocCStringLen forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second forall a b. (Integral a, Num b) => a -> b
fromIntegral