gpt4 book ai didi

haskell - 如何序列化 Thunk 或将其保存到文件中?

转载 作者:行者123 更新时间:2023-12-02 16:51:39 27 4
gpt4 key购买 nike

在 Haskell 中,你可以拥有无​​限的列表,因为它不会完全计算它们,而是使用 thunk。我想知道是否有一种方法可以序列化或以其他方式将一段数据的 thunk 保存到文件中。例如,假设您有一个列表 [0..]。然后你对其进行一些处理(我最感兴趣的是 tail(:),但它应该支持执行 filter map 也是如此。)这是我正在寻找的示例。

serial::(SerialThunk a)=>a->serThunk
serialized = serial ([0..] :: [Int])
main=writeToFile "foo.txt" serialized

还有

deserial::(SerialThunk a)=>serThunk->a
main=do
deserialized <- readFromFile "foo.txt" :: IO [Int]
print $ take 10 deserialized

最佳答案

。 Haskell 中没有办法序列化 thunk。一旦代码被编译,它通常被表示为程序集(例如,这就是 GHC 所做的),并且无法恢复函数的可序列化描述,更不用说您想要进行 thunk 的函数和环境了。

。您可以构建自定义解决方案,例如描述和序列化 Haskell 表达式。反序列化和执行可以通过解释的方式发生(例如使用 hint 包)。

也许。有人(你?)可以制作编译器或修改现有编译器,以与平台无关的方式维护更多信息,这样就可以在用户不手动利用hint的情况下序列化事物。我想这是 Cloud Haskell(又名 distributed-haskell)开发人员正在探索的。

为什么?我还希望能够序列化函数,以便我可以以灵活的方式传递闭包。但大多数时候,实际上并不需要这种灵 active ,而是人们希望传递某些类型的计算,这些计算可以轻松地表示为自定义数据类型和解释函数。

关于haskell - 如何序列化 Thunk 或将其保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22272453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com