我已经将一个地图写入文件,现在想对其执行读取操作。这是否可行?其中一个问题是代码使用ByteString和ByteString.Char8进行编写和读取。我一直收到以下错误:
fromList *** Exception: Prelude.read: no parse
我的代码如下:
import qualified Data.ByteString.Char8 as BSC
import qualified Data.ByteString as BS
import qualified Data.Map as Map
type Code = Map.Map Char [Bit]
writeCode :: FilePath -> Code -> IO ()
writeCode fp tr = BS.writeFile ("code_" ++ fp)
(BSC.pack (show (tr :: M.Map Char [Bit])))
readCode :: FilePath -> IO Code
readCode f = do s <- BS.readFile ("code_" ++ f)
let s' = BSC.unpack s
return (read s' :: Code)
Code
,将其写入文件中,以便可以重现错误? - Willem Van OnsemfromList [('e',[1,1,0]),('h',[1,1,1]),('l',[0]),('o',[1,0])]
是一个示例。当我将其写入文件时,它就会以这种方式出现在文件中,但现在我无法读取它。抱歉,Bit是一种具有One或Zero的数据类型,用1或0表示。 - astiefeltr2 = read $ show $ tr :: Code
有相同的效果吗?您能否提供完整的代码以重现此问题? - Luka Rahnedata Bit = One | Zero deriving (... , Ord)
这个定义非常奇怪,因为它会得出One < Zero
的结论!你几乎肯定想要重新排列这些构造函数。 - dfeuer