假设我有一个复杂的对象,它是由非平凡操作生成的,我可以将该对象序列化为ByteString,并将该Bytestring写入一个文件,然后打开该文件,并将其反序列化回同一个复杂对象。
现在,我想用Haskell代码对该文件的内容进行硬编码,这样我就可以“打开”该文件,而无需处理IO。
如何将文件的内容转换为ByteString文本?
下面是一个代码示例,可以让事情变得更清楚
someComplicatedObject :: MyDataType
someComplicatedObject = ...
serialized :: ByteString
serialized = serialize someComplicatedObject
serialized_literal :: ByteString
serialized_literal = "...." -- <- what goes here?
main :: IO
main = do
writeFile "myfile" serialized
-- at this point, I want to copy the contents of "myfile" and paste it into `serialized_literal`
fromFile <- readFile "myfile"
-- expect the following to by true
print $ serialized == fromFile
print $ fromFile == serialized_literal
1条答案
按热度按时间gr8qqesn1#
最简单的方法可能是使用 template Haskell“嵌入”文件。
例如,可以使用
file-embed
package。模板Haskell允许您在编译时运行Haskell函数。在这种情况下,**embedFile :: FilePath -> Q Exp
**将打开文件并将内容转换为ByteString
文本。因此,您可以使用以下命令运行此命令:
文件的内容将被嵌入到可执行文件中,这意味着如果你在编译程序之后修改了
myfile
,serialized_literal
仍然会保留你修改文件之前的内容。