MicroHs-0.11.4.0: lib/Foreign/C/String.hs
module Foreign.C.String(
CString, CStringLen,
newCAString, newCAStringLen,
peekCAString, peekCAStringLen,
withCAString, withCAStringLen,
newCString, newCStringLen,
peekCString, peekCStringLen,
withCString, withCStringLen,
) where
import Prelude() -- do not import Prelude
import Primitives
import Data.Char_Type
import Foreign.Marshal.Alloc
type CChar = Char
type CString = Ptr CChar
type CStringLen = (Ptr CChar, Int)
newCAString :: String -> IO CString
newCAString s = primNewCAStringLen s `primBind` \ (s, _) -> primReturn s
newCAStringLen :: String -> IO CStringLen
newCAStringLen = primNewCAStringLen
withCAString :: forall a . String -> (CString -> IO a) -> IO a
withCAString s io =
newCAString s `primBind` \ cs ->
io cs `primBind` \ a ->
free cs `primThen`
primReturn a
withCAStringLen :: forall a . String -> (CStringLen -> IO a) -> IO a
withCAStringLen s io =
newCAStringLen s `primBind` \ cs@(p, _) ->
io cs `primBind` \ a ->
free p `primThen`
primReturn a
peekCAString :: CString -> IO String
peekCAString = primPeekCAString
peekCAStringLen :: CStringLen -> IO String
peekCAStringLen (p, i) = primPeekCAStringLen p i
------------------------------------------------------
-- XXX: No encoding!
newCString :: String -> IO CString
newCString = newCAString
newCStringLen :: String -> IO CStringLen
newCStringLen = newCAStringLen
withCString :: forall a . String -> (CString -> IO a) -> IO a
withCString = withCAString
withCStringLen :: forall a . String -> (CStringLen -> IO a) -> IO a
withCStringLen = withCAStringLen
peekCString :: CString -> IO String
peekCString = peekCAString
peekCStringLen :: CStringLen -> IO String
peekCStringLen = peekCAStringLen