Re:ParsecでApplicativeを使ってみる
追記されたコードもう Functor しか使ってない…!ということで、こういうのはどうでしょう。
parseSExp :: Parser Int parseSExp = between (char '(') (char ')') expr where expr = foldl1 <$> op <* spaces <*> nums op = aux <$> opch opch = oneOf ['+', '-', '*'] aux '+' = (+) aux '-' = (-) aux '*' = (*) nums = sepBy1 num spaces num = read <$> many1 digit
"<* spaces" がかなりゴミっぽいので Haskell のプロの人なんとかしてください〜><
Applicative は使わずに do を使うと…?
parseSExP :: Parser Int parseSExP = do between (char '(') (char ')') expr where expr = do opch <- oneOf ['+', '-', '*'] spaces nums <- sepBy1 num spaces return $ foldl1 (aux opch) nums num = fmap read $ many1 digit aux '+' = (+) aux '-' = (-) aux '*' = (*)
大差なかった