添加其他信息到haskell类型

时间:2013-05-12 13:40:40

标签: haskell

我的程序中有令牌数据类型。看起来像这样:

data Token
    = StringToken Strin
    | NumberToken Integer
    | IfToken
    | ElseToken
    ... -- lots of tokens here

我在我的解析器中使用此数据类型,它运行正常。但现在我想向令牌添加一些额外的信息(源位置信息)。所以我可以更改我的数据类型声明并使用记录:

data Token
    = StringToken {value :: String, srcLoc :: SourceLocation}
    | NumberToken {value :: String, srcLoc :: SourceLocation}
    | IfToken {srcLoc :: SourceLocation}
    | ElseToken {srcLoc :: SourceLocation}
    ... -- lots of tokens here

但这个解决方案对我来说似乎并不实用和美观。那么这个问题有更好的解决方案吗? 感谢。

1 个答案:

答案 0 :(得分:9)

是:

data TokenLoc = TokenLoc {tok::Token , srcLoc::SourceLocation}

这将令牌和位置存储在一起,但干净利落地将它们分开,避免重复。