Eli*_*ard 5 parsing haskell types
我正在编写一个SVG解析器,主要是作为学习如何使用Parsec的练习.目前我使用以下数据类型来表示我的SVG文件:
data SVG = Element String [Attribute] [SVG]
| SelfClosingTag [Attribute]
| Body String
| Comment String
| XMLDecl String
Run Code Online (Sandbox Code Playgroud)
这很有效,但我不确定Element String [Attribute] [SVG]我的数据类型的部分.由于SVG 的潜在标签数量有限,我考虑使用类型来表示SVG元素而不是使用String.像这样的东西:
data SVG = Element TagName [Attribute] [SVG]
| ...
data TagName = A
| AltGlyph
| AltGlyphDef
...
| View
| Vkern
Run Code Online (Sandbox Code Playgroud)
这是个好主意吗?如果有的话,这样做的好处是什么?有更优雅的解决方案吗?
我个人更喜欢枚举所有可能的方法TagName。这样,如果您犯了任何粗心的错误,编译器可以给您错误和警告。例如,如果我想编写一个涵盖 的所有可能类型的函数Element,那么如果 ADT 中枚举了每种类型,则编译器可以向您提供非详尽的匹配警告。如果将其表示为字符串,则这是不可能的。此外,如果我想匹配Element特定类型的 ,并且我不小心拼错了TagName,编译器会捕获它。第三个原因可能并不真正适用于此,但一般来说值得注意的是,如果我稍后决定添加或删除 的变体TagName,那么编译器会告诉我需要修改的每个地方。我怀疑 SVG 标签名称会发生这种情况,但总的来说,这是需要记住的事情。
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |