Интересно, почему Data.ByteString.Lazy.putStrLn
устарел, но Data.ByteString.Lazy.putStr
и Data.ByteString.Lazy.hPutStr
нет?Каковы более безопасные и правильные альтернативы устаревшему `Data.ByteString.Lazy.putStrLn` и почему?
-- | A synonym for @[email protected], for compatibility
--
hPutStr :: Handle -> ByteString -> IO()
hPutStr = hPut
-- | Write a ByteString to stdout
putStr :: ByteString -> IO()
putStr = hPut stdout
-- | Write a ByteString to stdout, appending a newline byte
--
putStrLn :: ByteString -> IO()
putStrLn ps = hPut stdout ps >> hPut stdout (singleton 0x0a)
{-# DEPRECATED putStrLn
"Use Data.ByteString.Lazy.Char8.putStrLn instead. (Functions that rely on ASCII encodings belong in Data.ByteString.Lazy.Char8)"
#-}
-- | The interact function takes a function of type @ByteString -> [email protected]
-- as its argument. The entire input from the standard input device is passed
-- to this function as its argument, and the resulting string is output on the
-- standard output device.
Я думал, что это потому, что символы, хранящиеся в строке не будет выводиться корректно, если не указать кодировку в явном виде.
Но тогда это должно применяться ко всем этим функциям.
Теперь я подозреваю, что причиной является только символ новой строки с учетом этой функции.
Тогда я мог бы просто сделать
Data.ByteString.Lazy.putStr myString >> System.IO.putStrLn ""
и чувствовать себя в безопасности о не потерять информацию, делая вывод?
Вариант .Char8
чувствует себя как-то опасным.
В моем случае я печатаю закодированный JSON (для большей части отладки). И я ошеломлен предупреждением компилятора об устаревании. Добавление новой строки к функции построения ('encode :: (ToJSON a) => a -> ByteString') вообще не доступно. Теперь, по крайней мере, теперь я являюсь основной проблемой, поэтому я не буду бояться использовать ByteString везде. –
@ imz - IvanZakharyaschev Добавление новой строки должно быть таким же простым, как 'encode foo <> bar', где' foo' - ваше значение, тип которого является экземпляром 'ToJSON' и' bar' - это кодировка новой строки в любом кодирование JSON использует (возможно, UTF8?). –
Хорошо, спасибо! Я буду искать правильный 'bar' –