繁体   English   中英

类型之间的Haskell转换

[英]Haskell conversion between types

再次停留在可能是理论上的东西上。 Haskell中有很多库,我想尽量减少使用。 如果我有这样的类型:

data Note = Note { _noteID :: Int
                 , _noteTitle :: String
                 , _noteBody :: String
                 , _noteSubmit :: String
                 } deriving Show

并使用它来创建[Note {noteID=1...}, Note {noteID=2...}, ]等)的列表。 我现在有一个Note类型的列表。 现在,我想使用writeFile将其写入文件。 考虑到writeFile的类型为FilePath -> String -> IO () String- FilePath -> String -> IO () ,ghc可能不允许这样做。 但是我也想避免一直解构(writeFile)和构造(readFile)类型,假设我不会离开Haskell的“领域”。 有没有一种方法,而无需使用特殊的库? 再次:非常感谢。 Haskell上的书籍不错,但StackOverflow是书籍与现实世界之间的粘合剂。

如果您正在寻找“快速修复”,一次性脚本之类的东西,则除了Show之外,还可以派生Read ,然后可以使用show转换为String并通过read进行转换返回,例如:

data D = D { x :: Int, y :: Bool }
    deriving (Show, Read)

d1 = D 42 True

s = show d1
-- s == "D {x = 42, y = True}"

d2 :: D
d2 = read s
-- d2 == d1

但是,请你, 不要把这个在生产代码。 首先,您隐式地依赖于记录的编码方式,并且没有任何检查可以防止微妙的更改。 其次, read函数是局部的 -也就是说,如果无法解析输入,它将崩溃。 最后,如果您以这种方式保留数据则将受制于这种记录格式,并且永远无法更改它。

对于生产质量的解决方案,很抱歉,但是您必须提出一个明确的,已记录的序列化格式。 不可能解决-用任何语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM