Как мне поместить StrLn в Data.ByteString.Lazy.Internal.ByteString?
Я использую encode
(Тип Haskell через JSON в строку):
import GHC.Generics
import Data.Aeson
Строка есть (согласно сообщению об ошибке от компилятора): Data.ByteString.Lazy.Internal.ByteString
,
Как мне поставить StrLn это?
теоретически
То, что я ищу, это специальная полиморфная putStrLn
ищу подходящий экземпляр putStrLn
семантика для определенного строкового типа.
сообщения компилятора
Сообщение компилятора, если кому-то интересно:
valencies.lhs:182:22:
Couldn't match type `Data.ByteString.Lazy.Internal.ByteString'
with `[Char]'
Expected type: String
Actual type: Data.ByteString.Lazy.Internal.ByteString
In the return type of a call of `encode'
In the first argument of `putStrLn', namely `(encode CALL)'
In the expression: putStrLn (encode CALL)
смотрите также
Подобный вопрос, но с немного другим типом: как я могу поместить StrLn в Data.ByteString.Internal.ByteString?,
3 ответа
Это действительно зависит от вашего ByteString
, Он действительно содержит печатные символы? Какая на нем кодировка? Ты можешь использовать toString
от utf8-string
если вы знаете, что он содержит действительный UTF-8, а затем передать его putStrLn
,
Кстати, Hayoo отлично подходит для этого типа (хе-хе) вопросов. Поместите туда тип, и вы получите функции из Hackage с этими типами!
Вы можете использовать пакет string-class, он имеет три варианта: toString
функция (по умолчанию utf-8), fromLazyByteString
функция и putStrLn
это работает со всеми типами. Обратите внимание, что вам нужно сделать:
import Prelude hiding (putStrLn)
import Data.String.Class (putStrLn)
В этом случае у нас есть Lazy
вариант, поэтому мы должны использовать Data.ByteString.Lazy.putStrLn
,
Обратите внимание, что компилятор выдает интересное предупреждение:
In the use of `Data.ByteString.Lazy.putStrLn'
(imported from Data.ByteString.Lazy):
Deprecated: "Use Data.ByteString.Lazy.Char8.putStrLn instead. (Functions that rely on ASCII encodings belong in Data.ByteString.Lazy.Char8)"
Вероятно, если я хочу строки в кодировке UTF-8, я должен использовать другой вариант, а не рекомендуемый Char8
один. Я постараюсь выяснить это.
смарт-класс
Для умного пути, также посмотрите на string-class
Пакет упоминается в другом ответе Константина Рыбникова.