2013-05-12 126 views
2

我的程序中有令牌數據類型。它看起來像這樣:向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 

但是這種解決方案似乎並不十分實用,美觀到我。那麼這個問題有更好的解決方案嗎? 謝謝。

+0

http://stackoverflow.com/questions/16204177/how-should-i-represent-an-ast-annotated-with-additional-information – Arjan 2013-05-12 15:04:02

+0

@Arjan謝謝,它對我很有用。 – sergeyz 2013-05-12 19:14:22

回答

8

是:

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

它保存令牌和位置在一起,但乾淨地保持它們分開,避免重複。