gpt4 book ai didi

haskell - 使用酸状态 - 函数的安全副本

转载 作者:行者123 更新时间:2023-12-04 23:27:25 26 4
gpt4 key购买 nike

存在数据类型时的问题:

MyData = One Int | Two (Int -> Int) | Three | Four

问题是当我说
$(deriveSafeCopy 0 'base ''MyData)

我收到以下错误:
No instance for (SafeCopy (Int -> Int) )
arising from the use of `getSafePut`
...

所以我意识到 SafeCopy 可能不适用于功能......

我有麻烦吗?由于我无法更改 MyData 的模型....
有没有办法做到这一点?

最佳答案

确实,自SafeCopy点是序列化,你不能在你的数据中使用函数; GHC不支持函数的序列化,因为各种原因这样做会有问题;函数可以关闭操作系统句柄等临时数据,因此很难可靠地序列化和反序列化函数。

您必须以其他方式对其进行建模;例如,如果您只需要来自 Int -> Int 的几种可能的行为函数,您可以将其建模为数据类型。例如,如果您需要的唯一功能是 \x -> x `div` k (对于任意常数 k)和 \x -> x + 1 ,你可以写:

data IntToInt
= DivideBy Int
| PlusOne

可以是 SafeCopy 的一个实例.但是,如果您依赖不受限制的功能,那么恐怕您将不得不以更根本的方式更改您的设计。

关于haskell - 使用酸状态 - 函数的安全副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10492812/

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