标签: case-expression

冗余模式匹配的情况

我正在尝试为不同类型的语句编写haskell交错器。一个这样的语句是switch语句。到目前为止,我已经完成了以下操作,但仍然遇到问题,在case表达式中,对于(_-> if length)行,我不断收到多余的模式匹配警告。如果第一个case表达式正确,则通过测试,如果不是,则测试失败。任何帮助表示赞赏,谢谢

 interpret :: Program -> Memory -> Either Err Memory
 interpret [] memory = Right memory
 interpret (SwitchStmt var c:p) memory = let case1 = fst(c!!0)
                                            case2 = snd(c!!0)
                                         in do
                                           val <- evaluate var memory
                                           case val of case1 -> (interpret (case2++p) memory)
                                                        _ -> if length c > 1 then interpret ((SwitchStmt var (tail c)):p) memory
                                                             else interpret p memory 
Run Code Online (Sandbox Code Playgroud)

我已经定义了这样的数据类型:

data Stmt = SwitchStmt{
                        switchVar  :: Expr,
                        switchCase :: [(Expr,[Stmt])]
                        } 
Run Code Online (Sandbox Code Playgroud)

haskell case-expression

0
推荐指数
1
解决办法
152
查看次数

标签 统计

case-expression ×1

haskell ×1