nullで終了する文字列を作成し、その文字列へのポインタを返すC関数があります。また、対応する割り当て解除関数もあります。
foreign import ccall unsafe "get_str" getStr :: IO CString
foreign import ccall unsafe "free_str" freeStr :: CString -> IO ()
返されたCStringからHaskell文字列を作成し、できるだけ早くCStringを解放したいと思います。
do cStr <- getStr
str <- peekCString cStr
freeStr cStr
-- here str is used
strを使用する前にcStrを解放しても安全ですか?言い換えれば、peekCStringはHaskell Stringを一度に作成しますか、それとも怠惰に作成されますか?