我正在完成"在48小时内为自己写一个计划解释器",一个练习是使用do notation编写一个函数.这是功能:
parseNumber :: Parser LispVal
parseNumber = liftM (Number . read) $ many1 digit
Run Code Online (Sandbox Code Playgroud)
我尝试了以下,但这不起作用:
parseNumber2 :: Parser LispVal
parseNumber2 = do digits <- many1 digit
return $ liftM $ (Number . read) digits
Run Code Online (Sandbox Code Playgroud)
没关系.我错误地缩进了代码
一旦你打开包装digits,你就不再需要liftM了.所以它只是:
return $ Number $ read digits
Run Code Online (Sandbox Code Playgroud)