gpt4 book ai didi

haskell - Haskell 中有什么好的记录处理技巧吗?

转载 作者:行者123 更新时间:2023-12-01 11:53:49 25 4
gpt4 key购买 nike

我知道像这样的记录的部分更新:

data A a b = A { a :: a, b :: b }
x = A { a=1,b=2 :: Int }
y = x { b = toRational (a x) + 4.5 }

是否有仅进行部分初始化、创建子记录类型或对子记录进行(反)序列化的技巧?

特别是,我发现这些行中的第一行有效,但第二行无效:

read "A {a=1,b=()}" :: A Int ()
read "A {a=1}" :: A Int ()

您总是可以使用正则表达式处理此类输入,但我很好奇存在哪些类似 Haskell 的选项。

最佳答案

部分初始化工作正常:A {a=1}A Int () 类型的有效表达式; Read 实例不会解析任何 Show 实例不输出的内容。 b 字段初始化为 error "...",其中字符串包含有助于调试的文件/行信息。

对于任何真实世界的解析情况,您通常不应该使用 Read;它适用于具有非常简单的序列化需求和调试的玩具程序。

我不确定你所说的“子记录”是什么意思,但是如果你想要序列化/反序列化可以应对记录格式的“升级”以包含更多信息,同时仍然能够处理旧的(现在是“部分” ) 序列化,然后是 safecopy图书馆就是这样做的。

关于haskell - Haskell 中有什么好的记录处理技巧吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8974030/

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