《48小时自制Scheme》第二章代码编译报错求助
解决Haskell编译时的Parse error in pattern问题
你的编译错误根源是代码中使用了非标准的长破折号(−),而非Haskell语法要求的半角箭头符号(->),编译器无法识别这类符号导致解析失败。
修正后的完整代码
module Main where import System.Environment import Text.ParserCombinators.Parsec hiding ( spaces ) main :: IO () main = do args <- getArgs putStrLn (readExpr ( args !! 0)) symbol :: Parser Char symbol = oneOf "!$%&|*+-/:<=?>@^_~#" readExpr :: String -> String readExpr input = case parse symbol "lisp" input of Left err -> "No match: " ++ show err Right val -> "Found value"
需要修改的位置
- 替换所有的
−为->(包括类型签名和case分支的箭头) - 替换
args <− getArgs中的−为<-(绑定操作符)
新手注意事项
Haskell对语法符号的要求非常严格,所有语法相关的符号必须是半角字符。从PDF或网页复制代码时很容易引入全角符号或特殊字符,建议手动输入关键语法部分,避免类似问题。
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

