lambda错误中的非详尽模式

时间:2014-12-11 21:39:41

标签: haskell

在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中的非详尽模式

我在这里做错了可能是导致此错误的原因?

2 个答案:

答案 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