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、結果の文字列の後に引用符が含まれます。したがって、エラーを回避するには、引用符を削除してから削除する必要がありますread。インターネットからコピーした次の関数を使用してこれを行います。
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、期待どおりに動作します。
- なぜそうなのですか?
- ByteStringをIntに変換する最良の方法は何ですか?