测试Haskell变量是否与用户定义的数据类型选项匹配

5 haskell types typechecking

所以我的数据类型如下:

data Token = NUM Int | ID String | EOF
Run Code Online (Sandbox Code Playgroud)

我有一个类似的功能:

doStuff list = let
       (token, rest) = getToken list
   in
       ....
Run Code Online (Sandbox Code Playgroud)

所以,我想在做的...部分是测试,如果我得到令牌是NUMINTEOF.我可以说token==EOF,以测试这种情况下,但我不能想出一个办法来测试,如果令牌是NUMINT使用条件,因为token==(NUM n)token==NUM这两种结果中的错误.我知道我可以写一个辅助函数来处理这些东西...并利用模式匹配,但这确实会损害我正在做的事情的可读性,似乎应该有办法进行这项检查.谁知道怎么样?

mer*_*ict 12

你想要一个case表达式,如:

case token of
    NUM n -> foo n
    ID s  -> bar s
    _     -> hoho
Run Code Online (Sandbox Code Playgroud)

如果你单独定义一个函数,那就是你得到的那种模式匹配.


Dan*_*ner 8

一个可爱的技巧是使用记录语法.这种方法的优点是即使特定构造函数的参数数量发生变化,它也会继续工作.请注意,不需要使用记录语法声明数据类型本身以利用此技巧.

case token of
    NUM {} -> ...
    ID  {} -> ...
    EOF {} -> ...
Run Code Online (Sandbox Code Playgroud)