"Write Yourself a Scheme in 48 Hours"第2章的问题



我正试图在48小时内完成自己的计划。但是我在第6页已经遇到问题了。

提供的代码是:

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"

当我运行以下命令

ghc -o parser simpleparser1.hs

文件称为simpleparser1.hs。我得到以下错误消息。考虑到这些代码来自一本经典的书,我觉得这很奇怪。

[1 of 1] Compiling Main             ( simpleparser1.hs, simpleparser1.o )
simpleparser1.hs:15:5: error:
Parse error in pattern: Left err −> "No match: " ++ show err
|
15 |     Left err −> "No match: " ++ show err
|     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我确实看了这个,这个和这个帖子在stackoverflow。我对Haskell完全不熟悉,所以欢迎任何帮助。

PDF包含奇数unicode符号,如,这不是一个正常的破折号,而是一个unicode"减号"。要解决这个问题,只需替换它们:

readExpr :: String -> String
readExpr input =  case parse symbol "lisp" input of
Left err -> "No match: " ++ show err
Right val -> "Found value"

最新更新