Haskell代码报parse error on input ‘Just’错误,求问题排查
解决Haskell代码的Parse Error问题
嘿,我帮你排查出两个导致编译错误的问题啦:
1. 模式匹配的括号缺失
你写的apply s Var c是错误的——Var是Type的构造函数,当你要匹配Var String类型的值时,必须给它加上括号,写成apply s (Var c)。不然Haskell会把Var当成一个独立的函数参数,而不是Type构造函数的应用,这会直接导致解析逻辑混乱。
2. Case表达式的缩进问题
Haskell对缩进要求非常严格,case分支里的Nothing和Just行必须保持一致的缩进级别,不然编译器会识别不出它们属于同一个case的分支,进而抛出解析错误。
修正后的完整代码
data Type = Nat | Bool | App Type Type | Var String deriving (Eq, Show) type Substitution = [(String, Type)] apply :: Substitution -> Type -> Type apply s Nat = Nat apply s Bool = Bool apply s (Var c) = case lookup s c of Nothing -> Var c Just v -> v
额外小优化
你原来的(Var c)可以直接写成Var c,构造函数应用不需要额外括号,这样代码会更简洁清爽~
内容的提问来源于stack exchange,提问作者user2020493
相关产品推荐
相关产品推荐

