我有自定义数据类型:
data TextEditor = TextEditor [Char] [Char] [Char] deriving (Show)
用于在光标之前保留文本,然后保留光标,然后仅保留所做的选择。
我希望有一个“保存”功能,允许用户将此数据类型的内容保存到txt文件。我目前的版本是:
save :: TextEditor -> String -> IO()
save (TextEditor b a x) f = writeFile f (TextEditor b a x)
但是writeFile
需要一个String
而我正在传递三个[Char]
有没有办法将其转换为字符串或者是否有我遗漏的内容?
谢谢
答案 0 :(得分:1)
如果您derive (Show, Read)
,那么
save :: TextEditor -> FilePath -> IO ()
save editor f = writeFile f $ show editor
restore:: FilePath -> IO (Maybe TextEditor)
restore f = readMay <$> readFile f
readMay
来自包safe。read
/ show
/ String
的效率非常低,因此关于使用aeson
等内容进行(反)序列化的说法是个好主意。show
个实例,则派生的read
无法正常工作。