所以,这不是问题,但我想要一个更好的方式。所以我需要从外部源(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可读格式的最佳方式?地图,数据构造函数,依赖地图......
答案 0 :(得分:0)
这两种方式在他们自己的方面都非常有效,但由于我正在制作API以与这种协议进行交互,我更喜欢记录语法,因此我可以更容易地覆盖所有属性。此外,我并不是真的会在getter函数中进行任何检查或处理,并且无论多么无聊使我的类型的读者实例看起来似乎,我打赌手动执行所有get函数会更糟。手动解析东西本身就很无聊,我想我只是在寻找一个神奇的功能性衬垫来为我完成所有的工作。