【发布时间】:2012-01-23 15:26:17
【问题描述】:
我知道记录的部分更新如下:
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}的通用反序列化机制?我不建议实际以 HaskellShow格式存储任何数据;它根本不会紧凑,用 Haskell 以外的任何东西解析它都会很痛苦。