所以我的数据类型如下:
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)
所以,我想在做的...
部分是测试,如果我得到令牌是NUM
或INT
或EOF
.我可以说token==EOF
,以测试这种情况下,但我不能想出一个办法来测试,如果令牌是NUM
或INT
使用条件,因为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)
如果你单独定义一个函数,那就是你得到的那种模式匹配.
一个可爱的技巧是使用记录语法.这种方法的优点是即使特定构造函数的参数数量发生变化,它也会继续工作.请注意,不需要使用记录语法声明数据类型本身以利用此技巧.
case token of
NUM {} -> ...
ID {} -> ...
EOF {} -> ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3181 次 |
最近记录: |