У меня есть функция C, которая создает строку с нулевым символом в конце и возвращает указатель на нее, также есть соответствующая функция освобождения.
foreign import ccall unsafe "get_str" getStr :: IO CString
foreign import ccall unsafe "free_str" freeStr :: CString -> IO ()
Я хочу создать строку Haskell из возвращенной CString и освободить CString как можно скорее.
do cStr <- getStr
str <- peekCString cStr
freeStr cStr
-- here str is used
Безопасно ли освобождать cStr перед использованием str? Другими словами, peekCString создает строку Haskell сразу или она создается лениво?