This module provides immutable CStrings, which additionally have the property that they are automatically freed when the garbage-collector forgets about them.
- data ICStringLen
- newtype UTF8 bytes = UTF8 bytes
- toUTF8 :: Enum byte => String -> [byte]
- fromUTF8WE :: (Enum byte, Monad m) => [byte] -> m String
- mkICStringLen :: Int -> (CString -> IO ()) -> IO ICStringLen
- mkICStringLenExtra :: Int -> (CString -> IO extra) -> IO (ICStringLen, extra)
- withICStringLen :: ICStringLen -> (Int -> CString -> IO a) -> IO a
- bytesToICStringLen :: (Bytes, Int) -> IO ICStringLen
- bytesFromICStringLen :: ICStringLen -> (Bytes, Int)
- touchICStringLen :: ICStringLen -> IO ()
- readICStringLen :: HasBinary a StateBinArea => ICStringLen -> IO a
- writeToICStringLen :: HasBinary a StateBinArea => a -> IO ICStringLen
Converts a UTF8 representation of a String back into the String, catching all possible format errors.
Example: With the Haskell module Control.Monad.Error, you can instance this as (fromUTF8WE :: String -> Either String String) to get a conversion function which either succeeds (Right) or returns an error message (Left).