当前位置:  开发笔记 > 编程语言 > 正文

Haskell从文件中读取一个Map

如何解决《Haskell从文件中读取一个Map》经验,为你挑选了1个好方法。



1> Michael Szve..:

问题是你覆盖了Show的默认实现,但是依赖于Read的默认实现,它需要"One"或"Zero",而不是"1"或"0".

解决方案是编写自己的Read实现(你可以保留Eq和Ord):

import qualified Data.ByteString.Char8 as BSC
import qualified Data.ByteString as BS
import qualified Data.Map as Map

data Bit = One | Zero deriving (Eq,Ord)

instance Show Bit where
  show One = "1"
  show Zero = "0"

instance Read Bit where
  readsPrec _ ('1':xs) = [(One, xs)]
  readsPrec _ ('0':xs) = [(Zero, xs)]
  readsPrec _ _        = []

type Code = Map.Map Char [Bit]

writeCode :: FilePath -> Code -> IO ()
writeCode fp tr = BS.writeFile ("code_" ++ fp) (BSC.pack (show tr))

readCode :: FilePath -> IO Code
readCode f = do s <- BS.readFile ("code_" ++ f)
                let s' = BSC.unpack s
                return (read s' :: Code)

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有