具有自定义读取方法的严格映射或具有自定义读取实例的类型

时间:2017-11-04 00:09:00

标签: haskell serialization deserialization

所以,这不是问题,但我想要一个更好的方式。所以我需要从外部源(TCP)读取数据,基本上采用以下格式:

key: value
okey: enum
stuff: 0.12240
amazin: 1020

我需要将其解析为Haskell可访问格式,因此我想到的两个解决方案要么将其解析为严格的String to String映射,要么记录语法类型声明。

最初我想为我的String =>创建一个类型同义词字符串映射,并创建像amazin :: NiceSynonym -> Int这样的提取器函数,并在方法中进行必要的处理和解析,但感觉就像当时粗略一样?然后我想到了一个带有记录语法的实际类型声明,带有一个自定义的Read实例。那是一场噩梦,因为有很多枚举和钥匙有不同类型等等。感觉......令人失望。它只是包装参数并创建读者函数,与原始函数没有太大区别:amazin :: TypeDeclaration -> Int

现在,我有点后悔不按照我最初设想的阅读器功能。那么,我忘记考虑的其他事情呢?任何一方的利弊都要注意什么?一个客观上比另一个好吗?

P.S。:可能使一方或另一方更好的一些考虑因素:

  • 一旦阅读,我根本不需要改变它,它基本上是一个状态报告
  • 无需比较,添加等,再次只是状态报告无点
  • 不是真的需要表现,我不会读一百秒或任何事情

TL; DR:鉴于输入示例,什么是制作Haskell可读格式的最佳方式?地图,数据构造函数,依赖地图......

1 个答案:

答案 0 :(得分:0)

这两种方式在他们自己的方面都非常有效,但由于我正在制作API以与这种协议进行交互,我更喜欢记录语法,因此我可以更容易地覆盖所有属性。此外,我并不是真的会在getter函数中进行任何检查或处理,并且无论多么无聊使我的类型的读者实例看起来似乎,我打赌手动执行所有get函数会更糟。手动解析东西本身就很无聊,我想我只是在寻找一个神奇的功能性衬垫来为我完成所有的工作。