在Haskell中实现一个简单的解析器后,我运行了以下示例代码来测试我的削皮器。
example = fst $ (\(Just x)->x) $ parse (tokenize "assign x := not(and(true, false)); print x; assign a := not(and(x, x)); print a; end;") :: Stmt
并返回异常:Parse.hs:93:18-29:lambda中的非详尽模式
我在这里做错了可能是导致此错误的原因?
答案 0 :(得分:3)
您最终将Nothing
送入lambda (\(Just x) -> x)
,导致非详尽的模式匹配错误。而是使用maybe
函数:
default_value :: Stmt
default_value = ???
maybe default_value fst $ parse (tokenize "...") :: Stmt
答案 1 :(得分:2)
在你的lambda (\(Just x)->x)
中,你需要考虑它的参数可能是Nothing
的可能性。
试试这个:
hdlr (Just x) = x
hdlr Nothing = error "Failed"
example = fst $ hdlr $ parse (tokenize "assign x := not(and(true, false)); print x; assign a := not(and(x, x)); print a; end;") :: Stmt