Я всегда сталкиваюсь со следующей ошибкой при попытке прочитать ByteString:
Prelude.read: no parse
Вот пример кода, который вызовет эту ошибку при рендеринге в браузере:
factSplice :: SnapletSplice App App
factSplice = do
mbstr <- getParam "input" -- returns user input as bytestring
let str = maybe (error "splice") show mbstr
let n = read str :: Int
return [X.TextNode $ T.pack $ show $ product [1..n]]
Или, возможно, проще:
simple bs = read (show bs) :: Int
По какой-то причине после show bs
результирующая строка включает кавычки.
Поэтому, чтобы обойти ошибку, мне нужно удалить кавычки, затем прочтите
ее.
Для этого я использую следующую функцию, скопированную из Интернета:
sq :: String -> String
sq s@[c] = s
sq ('"':s) | last s == '"' = init s
| otherwise = s
sq ('\'':s) | last s == '\'' = init s
| otherwise = s
sq s = s
Тогда simple bs = read (sq.show bs) :: Int
работает должным образом.